对Tensorflow张量形状和matmul的澄清

时间:2017-05-23 18:03:48

标签: tensorflow

我需要澄清Tensorflow如何处理其张量的形状。这取自MNIST example

我定义了一个占位符,稍后会提供一些我的训练数据:

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 个答案:

答案 0 :(得分:1)

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

documentation for tf.add提到它支持broadcasting,这意味着当您将形状(10)的张量添加到形状为(100, 10)的张量时,它会相当于将(10)张量添加到(100, 10)张量的每行

希望有所帮助