Печать матрицы тензорного потока A.eval () изменяет значение транспонирования матрицы - PullRequest
0 голосов
/ 12 января 2020

У меня есть следующий фрагмент кода:

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()))

В этот момент все работает нормально.

Теперь, если я раскомментирую и строку № 1, и строку № 2, я получу неправильное значение в строке № 2 и, следовательно, неверное значение GA.

Если я раскомментирую только строку № 2, я получу правильное значение в строке # 2, но все же другое и неправильное значение GA.

Почему это происходит? Есть ли базовая c концепция TensorFlow, которую мне не хватает?

Спасибо!

1 Ответ

2 голосов
/ 12 января 2020

Легар,

Когда вы раскомментируете эти строки, вы делаете дополнительный вызов eval(), который вставляет следующее случайное значение 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]]
...