2016-11-13 115 views
0

前两个结果显示的尺寸或级别有何区别?为什么我能够添加这两个(矩阵/向量)?这可能听起来像一个天真的问题,但我很难理解张量/矩阵之间如何加法。谢谢。 (我也想知道为什么我可以添加的最后两个结果他们不是两个不同尺寸的矩阵。?)这两个张量之间有什么区别,为什么?

import tensorflow as tf 
import numpy as np 
W = tf.Variable(tf.zeros([784, 10])) 
x = tf.Variable(tf.zeros([2,784])) 
z = tf.matmul(x,W) 

Y = tf.Variable([4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 14.0]) 

x = tf.Variable(tf.zeros([2,10])) 

model = tf.initialize_all_variables() 

with tf.Session() as session: 
    session.run(model) 
    print(session.run(z)) 
    print(session.run(Y)) 
    print(session.run(x)) 

结果:

[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] 

[ 4. 5. 6. 7. 8. 9. 10. 11. 12. 14.] 

[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]] 

回答

0

我看不出有任何另外,只有乘法。

你正在用Y变量做的事情是打印张量本身,其中包含你指定的浮点值。

随着z,你将这两个张量相乘。矩阵乘法结果的维数的一般公式为MxN * OxP = MxP(M和O是行,N和P是列)。所以对于x,你有一个2×784张量乘以784×10张量。这(通过一般尺寸公式)为您提供尺寸为2x10的张量。

如果你的意思,你可以做加法与Yz之后,其实那是因为像tensorflow库通常从一个张量,只要某些维度匹配应用广播到另一个。所以,如果你没有Y + z你会得到

[[ 4. 5. 6. 7. 8. 9. 10. 11. 12. 14.] 
[ 4. 5. 6. 7. 8. 9. 10. 11. 12. 14.]] 

因为广播的被应用到Z中的行数。

编辑:我只是想指出,你自找的算术x的条件差),因为广播,z - Y

[[ -4. -5. -6. -7. -8. -9. -10. -11. -12. -14.] 
[ -4. -5. -6. -7. -8. -9. -10. -11. -12. -14.]] 
+0

谢谢你让我知道广播从一个张量到另一个。这正是我想了解的。我对前两项结果之间的区别是什么意思提出了一个精确的问题。 –