实际上,我正在做的课程“deeplearning.ai”的作业“神经风格转移的艺术生成”。在函数compute_layer_style_cost(a_S, a_G):
a_S = tf.reshape(a_S, [n_H*n_W, n_C])
a_G = tf.reshape(a_G, [n_H*n_W, n_C])
GS = gram_matrix(tf.transpose(a_S))
GG = gram_matrix(tf.transpose(a_G))
为什么这段代码会给出正确的答案,但是,以下内容并非如此:
a_S = tf.reshape(a_S, [n_C, n_H*n_W])
a_G = tf.reshape(a_G, [n_C, n_H*n_W])
GS = gram_matrix(a_S)
GG = gram_matrix(a_G)
答案 0 :(得分:1)
这是一个简单的例子,显示了这两个表达式之间的区别:
import tensorflow as tf
tf.InteractiveSession()
x = tf.range(0, 6)
a = tf.reshape(x, [3, 2])
b = tf.transpose(tf.reshape(x, [2, 3]))
print(x.eval())
print(a.eval())
print(b.eval())
结果:
[0 1 2 3 4 5]
[[0 1]
[2 3]
[4 5]]
[[0 3]
[1 4]
[2 5]]
您可以注意到,a
和b
不同,但形状相同。这是因为第一次重塑“将x
分成[0 1]
,[2 3]
和[4 5]
,而第二次重塑为[0 1 2]
和[3 4 5]
。< / p>