在TensorFlow中,为什么一个m*n矩阵可以加n*1矩阵?
In TensorFlow, why a m*n matrix can add n * 1 matrix?
我是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] 张量?这对我来说没有任何意义。
我知道为什么会有偏差,我知道为什么需要添加偏差。但我只是不知道“+”运算符在这个问题上是如何工作的。
这是因为在 Numpy 和 TensorFlow 中都可以找到一个叫做 广播 的概念。在高层次上,它是这样工作的:
假设您正在使用支持广播(例如 + 或 *)并具有 2 个输入张量 X 和 Y 的运算符。为了评估 X 和 Y 的形状是否兼容,运算符将评估从右边开始成对的尺寸。如果满足以下条件,则尺寸被视为兼容:
- 他们是平等的
- 其中一个是1
- 其中一个不见了
将这些规则应用于加法运算 (+) 以及形状 [100, 10] 和 [10] 的输入:
- 10 和 10 兼容
- 100 和 'missing' 兼容
如果形状兼容并且输入的维度之一为 1 或缺失,则操作基本上会平铺该输入以匹配其他输入的形状。
在您的示例中,加法操作会在执行加法之前有效地将形状 [10] 的 Y 平铺到形状 [100, 10]。
有关广播的详细信息,请参阅 Numpy 文档 (https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html)
我是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] 张量?这对我来说没有任何意义。
我知道为什么会有偏差,我知道为什么需要添加偏差。但我只是不知道“+”运算符在这个问题上是如何工作的。
这是因为在 Numpy 和 TensorFlow 中都可以找到一个叫做 广播 的概念。在高层次上,它是这样工作的:
假设您正在使用支持广播(例如 + 或 *)并具有 2 个输入张量 X 和 Y 的运算符。为了评估 X 和 Y 的形状是否兼容,运算符将评估从右边开始成对的尺寸。如果满足以下条件,则尺寸被视为兼容:
- 他们是平等的
- 其中一个是1
- 其中一个不见了
将这些规则应用于加法运算 (+) 以及形状 [100, 10] 和 [10] 的输入:
- 10 和 10 兼容
- 100 和 'missing' 兼容
如果形状兼容并且输入的维度之一为 1 或缺失,则操作基本上会平铺该输入以匹配其他输入的形状。
在您的示例中,加法操作会在执行加法之前有效地将形状 [10] 的 Y 平铺到形状 [100, 10]。
有关广播的详细信息,请参阅 Numpy 文档 (https://docs.scipy.org/doc/numpy-1.13.0/user/basics.broadcasting.html)