以ImageNet
数据集为例,它具有约1280000个图像/样本。我们将其保存为TFRecords
格式。假设每个.tfrecord
有10000个样本,最后将生成128个.tfrecord
文件。然后在CNN训练阶段,经过一个时期后,我们需要对数据集进行混洗,一般来说,需要对图像的索引进行混洗,并根据混洗后的索引顺序拍摄图像。
一个.tfrecord
中的图像是固定的,即1.tfrecord
的图像为0〜9999,2.tfrecord
的图像为10000〜19999,依此类推。图像索引被随机排列后,假设我们需要拍摄两个索引分别为5000
和15000
的图像,我们需要打开前两个.tfrecord
文件,并根据索引获取两个图像。此操作将花费大量内存并花费大量时间。
这合理吗?它实际上对随机操作有何作用?我不确定我是否正确理解tf.data.Dataset()
方案。如果方便的话,请您提供一些建议吗?谢谢。