【问题标题】:'Tensor' object has no attribute 'numpy' in tf.function in TF 2.0“张量”对象在 TF 2.0 的 tf.function 中没有属性“numpy”
【发布时间】:2019-04-09 15:41:15
【问题描述】:

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

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

【问题讨论】:

    标签: python tensorflow2.0


    【解决方案1】:

    如果你有一个非修饰函数,你可以正确地使用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/

    【讨论】:

    • 谢谢。当然它是在解释,但问题是tf.print 并没有真正提取值,这正是我所需要的。我需要提取该值以便将其插入到我想稍后分配给原始张量的 numpy.array,因为 tf.assign 不适用于张量的项目。
    • 如果您发布代码,我可以为您提供更多帮助。由于一个通用问题,我只是给出了一个通用答案:) 如果您愿意,您可以在将此问题标记为已解决后打开一个显示代码的新问题
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多