gpt4 book ai didi

python - Tensorflow:TFRecord 文件的预处理是否比实时数据预处理更快?

转载 作者:太空宇宙 更新时间:2023-11-03 14:08:03 24 4
gpt4 key购买 nike

在 Tensorflow 中,似乎可以在训练期间、从原始图像(或数据)创建批处理时或图像已经是静态时进行预处理。鉴于理论上,预处理应该花费大致相等的时间(如果它们使用相同的硬件完成),是否有任何实际 与实时训练相比,在训练前进行数据预处理(甚至数据扩充)有什么缺点?

作为附带问题,如果在训练期间未进行数据扩充,是否可以在 Tensorflow 中进行?

最佳答案

Is there any practical disadvantage in doing data preprocessing (or even data augmentation) before training than during training in real-time?

是的,有优点(+++)也有缺点(---):

预处理训练前:

  • --- 预处理样本需要存储:磁盘空间消耗* (1)
  • ---只能生成“有限”数量的样本
  • +++ 训练期间没有运行时间
  • ---...但样本总是需要从存储中读取,即可能存储(磁盘)I/O 成为瓶颈
  • --- 不灵活:更改数据集/扩充需要生成新的扩充数据集
  • +++ for Tensorflow:使用任何高级图像 API(open-cv、PIL...)轻松处理 numpy.ndarray 或其他数据格式进行扩充,甚至使用您喜欢的任何其他语言/工具。

预处理训练期间(“实时”):

  • +++ 可以生成无限数量的样本(因为它是即时生成的)
  • +++ 灵活:改变数据集/扩充只需要改变代码
  • +++ 如果数据集适合内存,读取一次后数据不需要磁盘 I/O
  • --- 为您的训练增加运行时间* (2)
  • --- 对于 Tensorflow:将预处理构建为 graph 的一部分需要使用 Tensors 并限制使用在 ndarrays 或其他格式上工作的 API。* (3)

详细讨论的一些具体方面:

  • (1) “使用相同的数据”重现实验 对于在训练前生成的数据集来说有点简单。然而,这可以通过存储实时数据生成的种子来优雅地解决(甚至更多!)。

  • (2):用于预处理的训练运行时:有一些方法可以避免昂贵的预处理管道成为阻碍你的实际训练。 Tensorflow 本身建议用许多 (CPU-)threads 填充 Queues,以便数据生成能够独立地跟上 GPU 数据消耗。您可以在 input pipeline performance guide 中阅读更多相关信息.

  • (3):tensorflow 中的数据增强

    As a side question, could data augmentation even be done in Tensorflow if was not done during (I think you mean) before training?

    是的,tensorflow 提供了一些功能来进行增强。在标量/向量(或更多维数据)的增值方面,您可以使用 tf.multiply 或其他基本数学操作轻松地自己构建一些东西。对于图像数据,实现了多个操作(参见 tf.imagetf.contrib.image ),应该可以满足很多增强需求。

    有现货preprocessing examples在 github 上,其中一个在 CNN tutorial 中使用和描述(cifar10)。


就个人而言,我总是会尝试使用实时预处理,因为生成(可能很大的)数据集感觉很笨重。但它是完全可行的,我已经看到它做了很多次并且(正如您在上面看到的)它肯定有它的优势。

关于python - Tensorflow:TFRecord 文件的预处理是否比实时数据预处理更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41806128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com