2017-05-23 58 views
1

我需要澄清一下Tensorflow如何处理张量的形状。这是从MNIST example采取:关于Tensorflow张量形状和matmul的澄清

我定义将在以后的点与我的一些训练数据馈送的占位符:

x = tf.placeholder(tf.float32, shape=[None, 784])

运行期间我给它在100批次,所以它在运行时的形状是(100, 784)。我还定义重量和偏见:

W = tf.Variable(tf.zeros([784,10])) 
b = tf.Variable(tf.zeros([10])) 

W是形状(784, 10)的和b是形状(10)的。现在我计算

y = tf.matmul(x,W) + b 

而这就是我卡住的地方。在运行期间,xW的矩阵产品的形状为(None, 10)(100, 10)。但是,我可以没有错误添加向量b它。这让我困惑。这如何工作?有没有更好的文件呢?

回答

1

tf.matmul(x, W) + b中的+运算符实际上是tf.add(tf.matmul(x, W), b)(运算符重载)的简写。

documentation for tf.add提到,它支持broadcasting,这意味着当你与形状(10)添加到张张量与形状(100, 10),它的每一行(100, 10)张量加入(10)张量的等价物。

希望帮助