【问题标题】:Is there an alternative to tf.py_function() for custom Python code?对于自定义 Python 代码,是否有替代 tf.py_function() 的方法?
【发布时间】:2020-04-17 05:23:25
【问题描述】:

我已经开始使用 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' 对象没有属性 '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 然后重新转换为张量并产生结果更优雅的方法。

【问题讨论】:

    标签: python tensorflow-datasets tensorflow2.0


    【解决方案1】:

    没有其他方法可以做到这一点,因为tf.data.Datasets 仍然(我想,出于性能原因,它们将始终以图形模式执行),因此,您不能使用@987654323 之外的任何东西@ 方法,可以很容易地被 TensorFlow 转换为它的图形表示。

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

    【讨论】:

    • 好心,tf 2.6 中的 Eager 是否允许混合执行 python 和图形执行?因为当我在模型构建期间尝试将张量转换为 numpy() 时,它会抛出一个错误,提示“张量”对象没有属性“numpy”。请指教。
    • 不,这是禁止的。如果此张量在图形模式下执行,则不可能在张量上调用 .numpy() 方法。定义 keras 模型时会隐式构建图,使用 tf.function 装饰函数时会显式构建。
    • 那么,有没有另一种方法可以在每个卷积层之后提取特征图以对其进行计算,然后将它们转换回张量以将它们提供给模型中的下一层?如果可能的话,请告诉我,因为我厌倦了寻找那个并且没有希望
    • 为了清楚起见,请看一下我在stackoverflow stackoverflow.com/questions/69890585/…发布的问题
    猜你喜欢
    • 1970-01-01
    • 2022-11-17
    • 2011-04-18
    • 2019-02-17
    • 2022-01-18
    • 1970-01-01
    • 2021-11-06
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多