【问题标题】:How can the Tensorflow2 data pipeline be optimized?Tensorflow2 数据流水线如何优化?
【发布时间】:2020-08-08 13:40:17
【问题描述】:

我使用一个大型图像数据集,我在第一步将其转换为 tfrecords,然后在下一步加载到 tf.data.dataset。

但是数据集太大了,尽管有 12 GB 的 GPU,但我无法获得比 10 更大的批量大小。现在问题来了,如何优化图像的加载,以便达到更大的 batch_size。

有没有办法使用 .fit_generator() 来优化这个过程?

这是我当前加载训练数据的过程(验证数据以相同的方式转换,因此这里也没有显示):

train_dataset = dataset.load_tfrecord_dataset(dataset_path, class_names_path, image_size)
train_dataset = train_dataset.shuffle(buffer_size=shuffle_buffer)
train_dataset = train_dataset.batch(batch_size)
train_dataset = train_dataset.map(lambda x, y: (
        dataset.transform_images(x, image_size),
        dataset.transform_targets(y, anchors, anchor_masks, image_size)))
train_dataset = train_dataset.prefetch(batch_size)

我的培训阶段开始:

history = model.fit(train_dataset,
                            epochs=epochs,
                            callbacks=callbacks,
                            validation_data=val_dataset)

【问题讨论】:

    标签: python-3.x tensorflow deep-learning tensorflow2.0 tensorflow-datasets


    【解决方案1】:

    不幸的是,无论我们从软件角度优化多少,都有一些依赖于硬件架构的限制。

    在您的情况下,可以增加批量大小的唯一方法是降低图像的尺寸;否则您将无法增加批量大小。

    tf.data.Dataset() 
    

    是处理数据的优秀库,使用正确/必要的预处理步骤,如prefetch 确实可以让您处理得更快。

    尽管如此,由于硬件限制,您无法增加批量大小。要么减小图像大小以便能够增加批处理大小,要么您需要选择更大的 GPU >=16 GB VRAM。

    【讨论】:

    • 所以目前没有其他解决方案可以仅加载大型垃圾(可能 8 GB)并使用这些数据训练模型,然后重新加载其他垃圾数据?换句话说:目前没有其他软件解决方案吗?
    • 是的,没有其他软件解决方案。最后,不管CPU/GPU通信优化如何,加载某张图片到内存中都会占用一定的空间。
    • 这就是我们最终使用批处理的原因......因为我们无法加载整个数据集(全梯度下降)来训练网络;当然,根据硬件架构和数据集等,此超参数可能会有所不同并达到您自己注意到的上限。
    猜你喜欢
    • 2019-08-28
    • 2022-01-17
    • 1970-01-01
    • 2022-07-14
    • 1970-01-01
    • 2012-05-26
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多