首页 > 解决方案 > 打印张量流矩阵 A.eval() 改变矩阵的转置值

问题描述

我有以下代码:

def gram_matrix(A):
    """
    Argument:
    A -- matrix of shape (n_C, n_H*n_W)

    Returns:
    GA -- Gram matrix of A, of shape (n_C, n_C)
    """
    #print(A.eval())  --> Line#1
    #print(tf.transpose(A).eval())  ---> Line#2
    ### START CODE HERE ### (≈1 line)
    GA = tf.matmul(A, tf.transpose(A))
    ### END CODE HERE ###

    return GA

上述方法由以下调用:

tf.reset_default_graph()

with tf.Session() as test:
    tf.set_random_seed(1)
    A = tf.random_normal([3, 2*1], mean=1, stddev=4)
    GA = gram_matrix(A)

    print("GA = \n" + str(GA.eval()))

此时一切正常。

现在,如果我取消注释 Line#1 和 Line#2,我在 Line#2 处得到不正确的值,因此 GA 的值不正确。

如果我只取消注释第 2 行,我会在第 2 行得到正确的值,但仍然是 GA 的不同且不正确的值。

为什么会这样?我缺少一个基本的 TensorFlow 概念吗?

谢谢!

标签: pythontensorflowconv-neural-network

解决方案


莱哈尔,

当您取消注释这些行时,您会额外调用eval()which 插入下一个随机值A. 试试下面的例子 - 你会看到 2 个不同的A打印值。

with tf.Session() as test:
tf.random.set_seed(1)
A = tf.random.normal([3, 2*1], mean=1, stddev=4)
print('A1',A.eval(), '\n')
print('A2',A.eval())

A1 [[ 7.8017416   1.2311957 ]
 [ 0.77180636  2.3617501 ]
 [-5.16232     1.8418424 ]] 

A2 [[ 0.19184637 -0.38206506]
 [ 1.3456485  -1.2691848 ]
 [ 4.286291    0.25501275]]

推荐阅读