自定义Python代码有tf.py_function()的替代方法吗?

时间:2019-12-27 07:19:50

标签: python tensorflow-datasets tensorflow2.0

我已经开始使用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)

上面的代码无法产生

  

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

我已阅读TensorFlow 2.0的文档,指出如果要使用任意python逻辑,则应根据以下条件使用tf.py_function 或仅使用TensorFlow原语How to convert "tensor" to "numpy" array in tensorflow?

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

老实说,似乎必须有一种比传递给tf.py_function,转换为numpy数组,执行操作A,B,C,D然后再转换为张量并产生结果。

1 个答案:

答案 0 :(得分:0)

没有其他方法可以这样做,因为tf.data.Dataset仍以图形方式执行(出于性能原因,我一直认为它们总是如此),因此,您不能在tf.*方法,可以通过TensorFlow轻松地转换为其图形表示形式。

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