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

标签 python image memory tensorflow load

我正在使用 TensorFlow V1.7 和新的高级 Estimator 界面。我能够使用自己的数据集创建和训练自己的网络。

但是,我用来加载图像的策略对我来说似乎并不正确。 到目前为止我使用的方法(很大程度上受到 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 文档,但到目前为止我还没有找到任何内容。

我有什么遗漏吗?

最佳答案

建议使用Dataset模块,它为您提供了使用队列、将少量示例预取到内存、线程数量等等的能力(除其他外)。

关于python - Tensorflow:仅在需要时将图像加载到内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037654/

相关文章:

python - 使用 scipy 对稀疏矩阵进行 groupby

python - 将字母范围扩展到 Python 中的字符列表

java - Java for 循环中分配的内存在循环后会被释放吗?

Python 列表内存错误

python - Pyqt4 - 将 2 个组合框的值添加到文本编辑中

android - 如何将经过训练的 scikit-learn 模型导入到 android 项目中

javascript - jQuery 图像和 if/else 语句

java - 使用 PaintComponent Java 绘制图像

javascript - 刷新页面后Dojo Div Toggle View

javascript - 如何通过 devtools(chrome、Edge 等)查看 JavaScript 使用的内存中具体有哪些变量?