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

Tim*_*lin 5 python tensorflow-datasets tensorflow2.0

我已经开始使用 TensorFlow 2.0,并且在某一方面有点不确定。

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

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

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


data = tf.data.Dataset.from_tensor_slices(tensor_images).map(my_function)
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用产生一个

“张量”对象没有属性“numpy”错误。

我已经阅读了关于 TensorFlow 2.0 的文档,指出如果想要使用任意的 Python 逻辑,则应该使用tf.py_function 或仅使用TensorFlow 原语How to convert "tensor" to "numpy" array in tensorflow?

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

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

nes*_*uno 6

没有其他方法可以做到这一点,因为tf.data.Datasets 仍然(我想,出于性能原因,它们将始终)以图形模式执行,因此,您不能使用tf.*方法之外的任何内容,这些方法可以通过以下方式轻松转换TensorFlow 到其图形表示。

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