我已经开始使用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然后再转换为张量并产生结果。
答案 0 :(得分:0)
没有其他方法可以这样做,因为tf.data.Dataset
仍以图形方式执行(出于性能原因,我一直认为它们总是如此),因此,您不能在tf.*
方法,可以通过TensorFlow轻松地转换为其图形表示形式。
使用tf.py_function
是混合使用tf.data.Dataset
对象的Python执行(因此,您可以使用任何Python库)和图形执行的唯一方法(与使用TensorFlow时相反) 2.0,默认情况下急切就可以自然地执行混合执行。