我使用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张图像。
这种做法对我来说似乎很奇怪。据我所知,这种方式只能访问一次二次存储器,从而最大限度地提高性能;但是,如果我的数据集非常大,这可能会使我的内存过载,不能吗?
因此,我想使用一种懒惰的方法,只在需要时加载图像(即当它们碰巧是一批时)。 我怎样才能做到这一点?我搜索过TF文档,但到目前为止我还没有找到任何内容。
我有什么遗失的吗?