tf.data相对于keras的性能.扩充数据时的Utils.sequence



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

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

我读过之前的一个问题(tf.data与keras.utils.sequence性能(,这两个问题都应该在CPU上预处理数据,但当我打开tensorboard探查器的增强功能时,似乎没有发生这种情况(生成器运行时,GPU闲置了50%的时间(。如果我关闭增强操作,只保留补丁提取,它会下降到10%。但它们似乎仍然没有重叠。

那么,我应该切换到tf.data吗?如果我需要编写自己的python代码来处理numpy,tf.data是否有效?或者只有当我可以使用它的内部函数时,它是否有效?我的keras.utils.Sequence有什么问题吗?

为了其可扩展性和代码清洁性,我会使用tf.data.Dataset()。正如您所观察到的,Sequence()的工作速度可能比您预期的还要慢。

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

相关内容

最新更新