我需要澄清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
这就是我被困的地方。 x
和W
的矩阵乘积在运行时期间具有(None, 10)
或(100, 10)
的形状。但是,我可以毫无错误地向其添加向量b
。这让我很困惑。这怎么办?还有一些更好的文档吗?
答案 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)
张量的每行。
希望有所帮助