我试图使用tensorflow在python中学习图像分类,我不确定如何在我的图像文件夹中读取。我的训练集超过10,000 .jpeg图像。我一直在使用MNIST教程和其他人,但是我没有看到有关导入整个文件夹的任何信息,而没有按照每个图像路径创建所有图像的数组(这种尺寸不可能)。有什么建议吗?
答案 0 :(得分:3)
使用数据集对象(在TF 1.4 +中添加)。
要开始使用,您应该阅读有关新输入管道的精心编写的开发人员指南。
https://www.tensorflow.org/programmers_guide/datasets
特别是,您希望使用list_files
生成所有文件名的数据集:
ds = tf.data.Dataset.list_files('*.jpg')
现在您可以使用这些文件加载图片:
ds = ds.map(map_func=load_image)
load_image
函数应接受张量(文件名)并输出张量(张量形式的图像)
这样的事情:
def load_image(filename_tensor):
return tf.image.decode_jpeg(filename_tensor)
该功能可能需要稍微扩展,您可能希望在其中添加数据扩充,因此请考虑您需要的核心骨架。
当您完成此操作后,您将创建一个读取数据的迭代器。绝对阅读上面引用的程序员指南。页面上的最后一个示例几乎就是您想要的。它是一个很好的数据输入管道,以及Tensorflow未来的发展方向。
请注意,使用数据集管道意味着您不需要通过sess.run
feed_dict
方法将图像传递到tenorflow。
答案 1 :(得分:1)
import glob
import numpy as np
globs = glob.glob('./test/*')
import PIL.Image as img
def img_array(path):
image = img.open(path)
tmp = np.array(image)
image.close()
return tmp
np.array(list(map(img_array, globs)))
用枕头打开它并将其转换为numpy数组并将所有数组映射到一个列表中。
out:
array([[[226, 245, 252],
[227, 246, 253],
[228, 247, 254],
...,