'Tensor' 对象在 TF 2.0 的 tf.function 中没有属性 'numpy'

'Tensor' object has no attribute 'numpy' in tf.function in TF 2.0

在 TensorFlow 2.0 的 tf.function 中是否有替代 tensor.numpy() 的方法?问题是,当我尝试在装饰函数中使用它时,我收到错误消息 'Tensor' object has no attribute 'numpy' 而在外部它运行时没有任何问题。

通常情况下,我会选择 tensor.eval() 之类的东西,但它只能在 TF 会话中使用,并且在 TF 2.0 中不再有会话。

如果你有一个非修饰函数,你可以正确地使用 numpy() 来提取 tf.Tensor

的值
def f():
    a = tf.constant(10)
    tf.print("a:", a.numpy())

装饰函数时,tf.Tensor 对象会改变语义,成为计算图的张量(普通的旧 tf.Graph 对象),因此 .numpy() 方法消失并且如果你想得到张量的值,你只需要使用它:

@tf.function
def f():
    a = tf.constant(10)
    tf.print("a:", a)

因此,您不能简单地修饰一个 eager 函数,而必须像在 Tensorflow 中那样重写它 1.x。

我建议您阅读这篇文章(和第 1 部分)以更好地理解 tf.function 的工作原理:https://pgaleone.eu/tensorflow/tf.function/2019/04/03/dissecting-tf-function-part-2/