一些背景信息,我正在加载大约60,000张图片到colab来训练GAN。我已经将它们上传到Drive,并且目录结构包含不同类别(大约7-8个)的文件夹在root
内。我按照以下方式将它们加载到colab:
root = "drive/My Drive/data/images"
root = pathlib.Path(root)
list_ds = tf.data.Dataset.list_files(str(root/'*/*'))
for f in list_ds.take(3):
print(f.numpy())
这将输出:
b'drive/My Drive/data/images/folder_1/2994.jpg'
b'drive/My Drive/data/images/folder_1/6628.jpg'
b'drive/My Drive/data/images/folder_2/37872.jpg'
我将按照以下方式进一步处理它们:
def process_path(file_path):
label = tf.strings.split(file_path, '/')[-2]
image = tf.io.read_file(file_path)
image = tf.image.decode_jpeg(image)
image = tf.image.convert_image_dtype(image, tf.float32)
return image#, label
ds = list_ds.map(process_path)
BUFFER_SIZE = 60000
BATCH_SIZE = 128
train_dataset = ds.shuffle(BUFFER_SIZE).batch(BATCH_SIZE)
每张图片的大小为
128x128
。现在来谈一下问题,当我尝试在colab中查看一个批次时,执行会永远继续下去,永远不会停止,例如,使用以下代码:for batch in train_dataset.take(4):
print([arr.numpy() for arr in batch])
我之前认为batch_size可能是个问题,所以尝试更改它,但问题仍然存在。这可能是由于在Colab中加载大量文件引起的问题吗?
或者由于图像大小的原因,当使用MNIST(28x28)时可以正常工作?如果是这样,有哪些可能的解决方案?
提前感谢。
编辑: 删除shuffle语句后,最后一行代码几秒钟内就能执行完。因此我认为这可能是由于shuffle的BUFFER_SIZE问题,但即使将BUFFER_SIZE减小,它仍需要很长时间才能执行。有没有什么解决方法?