我正在使用以下方法从路径中获取所有训练图像的列表:
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]