【问题标题】:TF 2.0 print tensor valuesTF 2.0 打印张量值
【发布时间】:2019-08-13 15:12:42
【问题描述】:

我正在学习最新版本的 Tensorflow (2.0),并尝试运行一个简单的代码来分割矩阵。 使用装饰器@tf.function 我做了以下类:

class Data:
def __init__(self):
    pass

def back_to_zero(self, input):
    time = tf.slice(input, [0,0], [-1,1])
    new_time = time - time[0][0]
    return new_time

@tf.function
def load_data(self, inputs):
    new_x = self.back_to_zero(inputs)
    print(new_x)

因此,当使用 numpy 矩阵运行代码时,我无法检索数字。

time = np.linspace(0,10,20)
magntiudes = np.random.normal(0,1,size=20)
x = np.vstack([time, magntiudes]).T


d = Data()
d.load_data(x)

输出:

Tensor("sub:0", shape=(20, 1), dtype=float64)

我需要以 numpy 格式获取此张量,但 TF 2.0 没有使用 run() 或 eval() 方法的类 tf.Session。

感谢您为我提供的任何帮助!

【问题讨论】:

    标签: python tensorflow tensorflow2.0


    【解决方案1】:

    在装饰器@tf.function 指示的图形内,您可以使用tf.print 打印张量的值。

    tf.print(new_x)
    

    下面是如何重写代码

    class Data:
        def __init__(self):
            pass
    
        def back_to_zero(self, input):
            time = tf.slice(input, [0,0], [-1,1])
            new_time = time - time[0][0]
            return new_time
    
        @tf.function
        def load_data(self, inputs):
            new_x = self.back_to_zero(inputs)
            tf.print(new_x) # print inside the graph context
            return new_x
    
    time = np.linspace(0,10,20)
    magntiudes = np.random.normal(0,1,size=20)
    x = np.vstack([time, magntiudes]).T
    
    d = Data()
    data = d.load_data(x)
    print(data) # print outside the graph context
    

    tf.decorator 上下文之外的张量类型是 tensorflow.python.framework.ops.EagerTensor 类型。要将其转换为numpy数组,可以使用data.numpy()

    【讨论】:

    • 嗨 edkeveked。我在 tf.function 中添加了 tf.print 语句,但它没有显示任何内容。
    • tf.print 语句只返回<tf.Operation 'PrintV2_3' type=PrintV2> :-( 我做错了什么?
    【解决方案2】:

    问题是您无法直接在图中获取张量的值。因此,您要么按照@edkeveked 的建议使用tf.print,要么按如下方式更改您的代码:

    class Data:
        def __init__(self):
            pass
    
        def back_to_zero(self, input):
            time = tf.slice(input, [0,0], [-1,1])
            new_time = time - time[0][0]
    
            return new_time
    
        @tf.function
        def load_data(self, inputs):
            new_x = self.back_to_zero(inputs)
    
            return new_x
    
    time = np.linspace(0,10,20)
    magntiudes = np.random.normal(0,1,size=20)
    x = np.vstack([time, magntiudes]).T
    
    d = Data()
    data = d.load_data(x)
    print(data.numpy())
    

    【讨论】:

    • 戈尔扬,感谢您的回答。您的解决方案显示以下错误:'Tensor' object has no attribute 'numpy'
    【解决方案3】:

    同样的问题,如何只打印张量的值?我已经输了半天了。缓慢但肯定地转向 Pytorch ...

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 2017-01-14
      • 2021-12-16
      • 2023-01-11
      • 2017-09-12
      • 2017-11-10
      • 2018-06-26
      • 1970-01-01
      相关资源
      最近更新 更多