【问题标题】:Performance of tf.data versus keras.Utils.sequence when augmenting data增强数据时 tf.data 与 keras.Utils.sequence 的性能
【发布时间】:2020-09-02 10:41:50
【问题描述】:

在 COLAB 中使用 tensorflow 2.3 及其内部 tf.keras

我正在训练一个在输入中处理 2D 图像的网络,该网络真正受益于数据增强(主要是仿射变换、补丁提取和强度操作)。输入数据都适合内存,所以我没有任何磁盘读取瓶颈。这些操作有点适合我的数据,所以我更喜欢自己实现它们,如果可能的话。我可以用 numpy 函数和 keras 生成器函数来做所有事情。我使用keras.sequence 来构建我的生成器,因为我知道这是最好的做法。在其他来源,有人说tf.data 更标准。

我读过上一个问题 (tf.data vs keras.utils.sequence performance),这两个问题都应该在 CPU 上预处理数据,但是当我打开增强功能时,从张量板分析器看来这没有发生 (50生成器运行时 GPU 空闲所花费的时间百分比)。如果我关闭增强操作并只保留补丁提取,它会下降到 10%。但它们似乎仍然没有重叠。

那么,我应该切换到tf.data 吗?如果我需要编写自己的适用于 numpy 的 python 代码,tf.data 是否有效,或者只有当我可以使用它的内部函数时它才能正常工作?我对keras.utils.Sequence 做错了吗?

【问题讨论】:

    标签: tensorflow keras tensorflow-datasets


    【解决方案1】:

    我会求助于使用tf.data.Dataset() 的可扩展性和代码简洁性。正如您所观察到的,Sequence() 的运行速度可能比您预期的还要慢。

    如果你确实使用了tf.data.Dataset(),你必须确保你使用了内部的 tensorflow 函数,也就是说,如果你想要尽可能好的性能。否则,可以使用https://www.tensorflow.org/api_docs/python/tf/py_function 来实现自定义 Python 代码,例如 numpy 扩充/操作。

    【讨论】:

    • 谢谢!你知道一些关于如何使用它的好教程吗?我需要做一些非常简单的事情(从 4D 张量中挑选一些切片,将它们堆叠成 6 个(通道)并应用一些几何变形/强度变化)。同时保留已提取的元素列表。在 Python 中很容易,但我不知道从哪里开始 tf.data.Dataset
    • TF 最近在文档方面做得很好:tensorflow.org/api_docs/python/tf/data/Dataset
    猜你喜欢
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多