我正在使用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文档,但到目前为止我还没有找到任何东西。在
我有什么遗漏吗?在
建议使用Dataset模块,该模块为您提供了使用队列、将少量示例预取到内存、线程数量等等的功能(除其他外)。在
相关问题 更多 >
编程相关推荐