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

2024-04-25 23:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

    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

这意味着在训练网络之前,我必须将所有的训练集加载到内存中,包括一些类似32k图像的内容。 然而,由于我的批量大小是100,网络将不需要超过100个图像一次。在

这种方法在我看来很奇怪。我知道这种方式只能访问一次辅助内存,从而最大限度地提高性能;但是,如果我的数据集非常大,这可能会使我的RAM过载,不是吗?在

因此,我想使用一种懒惰的方法,只在需要时加载图像(例如,当它们碰巧是批处理时)。 我该怎么做?我已经搜索过TF文档,但到目前为止我还没有找到任何东西。在

我有什么遗漏吗?在


Tags: 数据方法内存in图像网络labelsos