在TensorFlow中,为什么m * n矩阵可以添加n * 1矩阵?

时间:2017-09-21 10:51:00

标签: matrix tensorflow mnist softmax tensor

我是python和TensorFlow的新手,最近几天我在学习" MNIST For ML Beginners"(https://www.tensorflow.org/get_started/mnist/beginners)时遇到了问题。

在本教程中,我们使用y = tf.nn.softmax(tf.matmul(X, W) + b)来获取输出。

我的问题是,例如,X是[100,784]矩阵,W是[784,10]矩阵,b是[10]张量(就像[10,1]矩阵?),在我们调用之后tf.matmul(X,W)我们将得到一个[100,10]矩阵。这是我的问题,[100,10]矩阵如何在这里添加b [10]张量?这对我没有任何意义。

我知道为什么会有偏见,我知道为什么需要添加偏见。但我只是不知道" +"运营商解决了这个问题。

1 个答案:

答案 0 :(得分:0)

这是因为一个名为广播的概念可以在Numpy和TensorFlow中找到。从高层次来看,这就是它的工作原理:

假设您正在使用支持广播的操作(例如+或*)并且有2个输入张量,X和Y.为了评估X和Y的形状是否兼容,操作系统将评估成对的尺寸从右边开始。在以下情况下,尺寸被视为兼容:

  • 他们是平等的
  • 其中一个是1
  • 其中一个缺失

将这些规则应用于添加操作(+)和形状[100,10]和[10]的输入:

  • 10和10兼容
  • 100&'缺少'兼容

如果形状兼容并且输入的某个尺寸为1或缺失,则op将基本上平铺该输入以匹配另一个输入的形状。

在您的示例中,添加操作将在执行添加之前有效地将形状[10]的Y平铺到形状[100,10]。

有关更多详细信息,请参阅有关广​​播的Numpy文档(https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html

相关问题