如何从路径中获取图像以传递给model.fit方法?

我正在使用以下方法从路径中获取所有训练图像的列表:

def ReadImages(Path):    ImageList = list()    LabelList = list()    # 获取所有子目录    FolderList = os.listdir(Path)    # 遍历每个目录    for File in FolderList:        if(os.path.isdir(Path + os.path.sep + File)):            for Image in os.listdir(Path + os.path.sep + File):                # 将图像路径添加到列表中                ImageList.append(Path + os.path.sep + File + os.path.sep + Image)                # 为每张图像添加标签并移除文件扩展名                LabelList.append(File.split(".")[0])        else:            ImageList.append(Path + os.path.sep + File)            # 为每张图像添加标签并移除文件扩展名            LabelList.append(File.split(".")[0])    return ImageList, LabelList

现在我想使用这些数据调用Keras方法’model.fit(data,labels,epochs, bs)’

model = Sequential()model.add(Dense(32, activation='tanh', input_dim=1))model.add(Dense(1, activation='sigmoid'))model.compile(optimizer='rmsprop',              loss='binary_crossentropy',              metrics=['accuracy'])data, labels = ReadImages(TRAIN_DIR)# 以32个样本为一批次迭代数据训练模型model.fit(np.array(data), np.array(labels), epochs=10, batch_size=32)

但它显示了以下错误:

return array(a, dtype, copy=False, order=order)ValueError: could not convert string to float: 'train_data/\\non_pdr\\im0008.ppm'

如何将我的路径列表转换为可以用于训练模型的数据列表?

我的文件类似于

([‘train_data/non_pdr\im0001.ppm’, ‘train_data/non_pdr\im0002.ppm’, ‘train_data/non_pdr\im0003.ppm’, ‘train_data/non_pdr\im0004.ppm’, ‘train_data/non_pdr\im0005.ppm’, ‘train_data/non_pdr\im0006.ppm’, ‘train_data/non_pdr\im0007.ppm’, ‘train_data/non_pdr\im0008.ppm’, ‘train_data/non_pdr\im0009.ppm’, ‘train_data/non_pdr\im0010.ppm’, ‘train_data/non_pdr\im0011.ppm’, ‘train_data/non_pdr\im0012.ppm’, ‘train_data/non_pdr\im0013.ppm’, ‘train_data/non_pdr\im0014.ppm’, ‘train_data/non_pdr\im0015.ppm’, ‘train_data/non_pdr\im0016.ppm’, ‘train_data/non_pdr\im0017.ppm’, ‘train_data/non_pdr\im0018.ppm’, ‘train_data/non_pdr\im0019.ppm’, ‘train_data/non_pdr\im0020.ppm’, ‘train_data/non_pdr\im0021.ppm’, ‘train_data/non_pdr\im0022.ppm’, …


回答:

抱歉,我的旧答案(如下)仍然是最佳实践,但这更像是一个存在的问题。你正在将一个路径项数组传递给你的Sequential模型。你需要的是一个图像数组列表,所以你需要加载这些图像(如何将RGB图像转换为numpy数组?)。

请查看模型文档以了解变量类型:https://keras.io/models/sequential/

旧答案

你的ValueError回溯中混合了斜杠,我不确定这是来自实际文件名还是与你的path_sep变量有关。最好使用os模块内置的路径连接函数os.path.join。这可能是解决你的问题的办法。如果能提供一个样本目录文件列表,问题会更完整。

# 不要这样写:Path + os.path.sep + File # 应该这样写:os.path.join(Path, File)

另外,附加提示:

# 根据文件名,这可能不起作用:File.split('.')[0] # 如果文件名为2019.08.19_file.txt会怎样?# 尝试:os.path.splitext(File)[0]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注