Python Tensorflow:仅在需要时将图像加载到内存中

Python Tensorflow:仅在需要时将图像加载到内存中,python,image,memory,tensorflow,load,Python,Image,Memory,Tensorflow,Load,我正在使用TensorFlow V1.7和新的高级估计器接口。我能够用自己的数据集创建和训练自己的网络 然而,我用来加载图像的策略似乎并不适合我。 到目前为止,我使用的方法(主要受MNIST教程的启发)是从一开始就将所有图像加载到内存中 (下面是一个小代码片段,让您了解一下): os.listdir(文件夹)中文件名的: filepath=os.path.join(文件夹,文件名) #使用OpenCV读取图像 images.append(cv2.imread(文件路径,cv2.imread\u灰

我正在使用TensorFlow V1.7和新的高级估计器接口。我能够用自己的数据集创建和训练自己的网络

然而,我用来加载图像的策略似乎并不适合我。 到目前为止,我使用的方法(主要受MNIST教程的启发)是从一开始就将所有图像加载到内存中 (下面是一个小代码片段,让您了解一下):

os.listdir(文件夹)中文件名的
:
filepath=os.path.join(文件夹,文件名)
#使用OpenCV读取图像
images.append(cv2.imread(文件路径,cv2.imread\u灰度))
labels.append()
#以相同的方式洗牌样本和标签
temp=列表(zip(图像、标签))
随机洗牌(临时)
图像、标签=zip(*temp)
返回图像、标签
这意味着,在训练网络之前,我必须将包含32k图像的所有训练集加载到内存中。 然而,由于我的批量大小是100,网络一次不需要超过100张图像

我觉得这种方法很奇怪。我知道,这种方式只能访问一次辅助内存,最大限度地提高了性能;然而,如果我的数据集真的很大,这可能会使我的RAM过载,不是吗

因此,我希望使用一种惰性方法,仅在需要图像时加载图像(即,当图像恰好在批处理中时)。 我该怎么做?我已经搜索了TF文档,但到目前为止还没有找到任何东西


有什么我遗漏的吗?

建议您使用该模块,该模块为您提供了使用队列、将少量示例预取到内存、线程数量等功能。

感谢您的输入,我非常感谢!不幸的是,我仍然被卡住了。我现在使用的是一个从生成器生成的数据集,因此只有当要求生成器生成时,才会读取每个图像。然而,我不知道如何将这个数据集传递给我的估计器。更详细地说,在我以前的实现中,我从tf.estimator.inputs.numpy_input_fn()获得了一个输入函数,并将该输入函数传递给了estimator.train()方法。如何使用已经计算过的数据集执行类似操作?我在文档中找不到任何示例:(是的,如果您可以链接到一些示例,那就太好了。我正在浏览TF文档,但没有看到如何操作。看起来keras.preprocessing.image类比Dataset类更有用
    for filename in os.listdir(folder):
        filepath = os.path.join(folder, filename)
        # using OpenCV to read image
        images.append(cv2.imread(filepath, cv2.IMREAD_GRAYSCALE))
        labels.append(<corresponding label>)

    # shuffle samples and labels in the same way
    temp = list(zip(images, labels))
    random.shuffle(temp)
    images, labels = zip(*temp)

    return images, labels