'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/
在 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/