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

Matrix 在TensorFlow中,为什么m*n矩阵可以加n*1矩阵?,matrix,tensorflow,mnist,softmax,tensor,Matrix,Tensorflow,Mnist,Softmax,Tensor,我对python和TensorFlow非常陌生,最近几天我在为ML初学者学习MNIST时遇到了一个问题 在本教程中,我们使用y=tf.nn.softmaxtf.matmulX,W+b来获得输出 我的问题是,例如,X是一个[100784]矩阵,W是[784,10]矩阵,b是一个类似于[10,1]矩阵的[10]张量?,在我们调用tf.matmulX之后,我们将得到一个[100,10]矩阵。这是我的问题,[100,10]矩阵如何在这里加上b[10]张量?这对我来说毫无意义 我知道为什么会有偏见,我知道

我对python和TensorFlow非常陌生,最近几天我在为ML初学者学习MNIST时遇到了一个问题

在本教程中,我们使用y=tf.nn.softmaxtf.matmulX,W+b来获得输出

我的问题是,例如,X是一个[100784]矩阵,W是[784,10]矩阵,b是一个类似于[10,1]矩阵的[10]张量?,在我们调用tf.matmulX之后,我们将得到一个[100,10]矩阵。这是我的问题,[100,10]矩阵如何在这里加上b[10]张量?这对我来说毫无意义


我知道为什么会有偏见,我知道为什么需要添加偏见。但我只是不知道+操作符在这个问题上是如何工作的。

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

假设您使用的op支持播放eg+或*,并且有2个输入张量X和Y。为了评估X和Y的形状是否兼容,op将从右侧开始成对评估尺寸。在下列情况下,尺寸视为兼容:

他们是平等的 其中一个是1 其中一个失踪了 将这些规则应用于add操作+和shape[100,10]和[10]的输入:

10和10是兼容的 100和“缺失”是兼容的 如果形状是兼容的,并且输入的一个维度为1或缺失,则op将基本上平铺该输入以匹配其他输入的形状

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


有关广播的更多详细信息,请参见Numpy文档

参见numpy10中的广播,而不是10,1。向量不会自动成为矩阵、行向量或列向量。这只是一个向量。非常感谢,它非常有用。