.jpeg文件的Python导入文件夹

.jpeg文件的Python导入文件夹,python,tensorflow,machine-learning,jpeg,Python,Tensorflow,Machine Learning,Jpeg,我正在尝试使用tensorflow学习python中的图像分类,但我不确定如何阅读我的图像文件夹。我有一个超过10000个.jpeg图像的训练集。我一直在使用MNIST教程和其他教程,但是我没有看到任何关于导入整个文件夹而不按每个图像路径创建所有图像的数组的信息(在这种大小下是不可能的)。有什么建议吗?使用数据集对象(添加在TF 1.4+中) 要开始,您应该阅读关于新输入管道的编写良好的开发人员指南 特别是,您希望使用列出\u文件生成包含所有文件名的数据集: ds = tf.data.Data

我正在尝试使用tensorflow学习python中的图像分类,但我不确定如何阅读我的图像文件夹。我有一个超过10000个.jpeg图像的训练集。我一直在使用MNIST教程和其他教程,但是我没有看到任何关于导入整个文件夹而不按每个图像路径创建所有图像的数组的信息(在这种大小下是不可能的)。有什么建议吗?

使用数据集对象(添加在TF 1.4+中)

要开始,您应该阅读关于新输入管道的编写良好的开发人员指南

特别是,您希望使用
列出\u文件
生成包含所有文件名的数据集:

ds = tf.data.Dataset.list_files('*.jpg')
现在,您可以使用这些文件加载图像:

ds = ds.map(map_func=load_image)
load\u image
函数应接受一个张量(文件名)并输出一个张量(以tensorflow形式显示的图像)

大概是这样的:

def load_image(filename_tensor):
  return tf.image.decode_jpeg(filename_tensor)

该函数可能需要扩展一点,并且您可能需要在其中添加数据增强,因此考虑一下您需要的核心骨架。 完成后,您将创建一个迭代器来读取数据。一定要阅读上面提到的程序员指南。页面上的最后一个示例几乎完全符合您的要求。这是一个很好的数据输入管道,也是Tensorflow未来的发展方向

请注意,使用数据集管道意味着您不需要通过sess将图像传递到tenorflow。运行的feed\u dict方法。

使用数据集对象(在TF 1.4+中添加)

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)))
要开始,您应该阅读关于新输入管道的编写良好的开发人员指南

特别是,您希望使用
列出\u文件
生成包含所有文件名的数据集:

ds = tf.data.Dataset.list_files('*.jpg')
现在,您可以使用这些文件加载图像:

ds = ds.map(map_func=load_image)
load\u image
函数应接受一个张量(文件名)并输出一个张量(以tensorflow形式显示的图像)

大概是这样的:

def load_image(filename_tensor):
  return tf.image.decode_jpeg(filename_tensor)

该函数可能需要扩展一点,并且您可能需要在其中添加数据增强,因此考虑一下您需要的核心骨架。 完成后,您将创建一个迭代器来读取数据。一定要阅读上面提到的程序员指南。页面上的最后一个示例几乎完全符合您的要求。这是一个很好的数据输入管道,也是Tensorflow未来的发展方向

请注意,使用数据集管道意味着您不需要通过
sess.run
feed\u dict
方法将图像传递到tenorflow

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],
        ..., 
用枕头打开它,将其转换为numpy数组,并将所有数组映射到一个列表中

out:

array([[[226, 245, 252],
        [227, 246, 253],
        [228, 247, 254],
        ..., 

必须有一个函数可以帮助您列出给定相对和/或绝对路径的所有文件。:)为什么“在这种尺寸下不可能”?当您加载mnist时,您会将数千个图像加载到内存中,为什么您不能通过简单地创建一个np.zeros数组并通过迭代文件夹中的每个图像来填充它呢?这与假设的从文件夹加载图像有什么区别?最后,您在内存中有相同的权限吗?必须有一个函数可以帮助您列出给定相对和/或绝对路径的所有文件。:)为什么“在这种尺寸下不可能”?当您加载mnist时,您会将数千个图像加载到内存中,为什么您不能通过简单地创建一个np.zeros数组并通过迭代文件夹中的每个图像来填充它呢?这与假设的从文件夹加载图像有什么区别?最后,您在内存中也有相同的权利?这不是一种将数据馈送到Tensorflow的有效方法。它可能是任何框架,它应该迭代并获取数据。这不是将数据馈送到Tensorflow的有效方法。它可能是任何框架,它应该迭代并获取数据。