对于自定义 Python 代码,是否有替代 tf.py_function() 的方法?

Is there an alternative to tf.py_function() for custom Python code?

我已经开始使用TensorFlow 2.0,有一个方面有点不确定。

假设我有这个用例:在使用 tf.data.Dataset 摄取数据时,我想对某些图像应用一些特定的增强操作。但是,我使用的外部库 要求 图像是一个 numpy 数组 不是张量 .

使用tf.data.Dataset.from_tensor_slices()时,流动数据需要是Tensor类型。具体例子:

def my_function(tensor_image):
   print(tensor_image.numpy()
   return


data = tf.data.Dataset.from_tensor_slices(tensor_images).map(my_function)

上面的代码无法产生

'Tensor' object has no attribute 'numpy' error.

我已阅读有关 TensorFlow 2.0 的文档,其中指出如果要使用任意 python 逻辑,则应使用 tf.py_function 或仅使用 TensorFlow 原语 根据:

我的问题如下:是否有另一种方法可以在具有自定义 decorator/an 的函数中使用任意 python 代码比使用更简单的方法tf.py_function?

老实说,似乎必须有比传递给 tf.py_function 更优雅的方法,转换为 numpy 数组,执行操作 A、B、C、D,然后重新转换为张量和产生结果。

没有其他方法可以做到这一点,因为 tf.data.Datasets 仍然(而且我想,出于性能原因,它们将始终)以图形模式执行,因此,您不能在外部使用任何东西在 tf.* 方法中,TensorFlow 可以轻松将其转换为其图形表示。

使用 tf.py_function 是在使用 tf.data.Dataset 对象时混合 Python 执行(因此,您可以使用任何 Python 库)和图形执行的唯一方法(与使用 TensorFlow 2.0 时发生的情况相反,默认情况下急切允许这种混合执行)。