了解 Tensorflow MNIST 教程 - 输入 x 是列矩阵还是列矩阵数组?
Understanding the Tensorflow MNIST tutorial - Is the input x a column matrix or an array of column matrices?
我正在关注Tensorflow MNIST tutorial。
通读了理论/直觉部分,我开始理解 x
输入是一个列矩阵。
其实在描述softmax
时,x
显示为一个列矩阵:
然而,在 tensorflow
中声明,x 看起来像这样:
x = tf.placeholder(tf.float32, [None, 784])
我读到这个 x
是一个可变长度的数组 ( None ),这个数组的每个元素都是一个大小为 784 的列矩阵。
即使 x
被声明为列矩阵数组,它也被当作列矩阵使用:
y = tf.nn.softmax(tf.matmul(x, W) + b)
在示例中,W
和b
被直观地声明为形状变量[784, 10]
和[10]
,这是有道理的。
我的问题是:
Tensorflow是否自动对x中的每一列矩阵进行softmax运算?
我是否正确地假设 [None, value] 意味着,直觉上,一个可变大小的数组,每个元素都是一个大小值的数组?或者 [None, value] 是否也可以表示大小值的数组? (不在容器数组中)
link 理论描述的正确方法是什么,其中 x 是实现的列向量,其中 x 是列矩阵数组?
感谢您的帮助!
直觉是针对单个输入样本的(这就是您看到列向量的原因)。然而在实践中,训练是使用由许多输入样本组成的小批量完成的。 (取决于 batch_size
)。
x = tf.placeholder(tf.float32, [None, 784])
此行构成一个维度为 ? x 784
的矩阵,其中 ?
表示批量大小。从某种意义上说,列向量已成为这个新矩阵的行。
由于我们已将列向量转换为行,因此我们交换了 x
和 W
的乘法顺序。这就是为什么 W
的维度为 784 x 10
而 b
的维度 10
将应用于所有元素。
在第一次乘法之后,x*W
有一个维度 ? x 10
。 x*W
的每一行都添加了相同的元素 b
。因此,如果我的 x*W
的第一行是 [1,2,3,4,5,6,7,8,9,0]
并且 b
是 [1,1,1,1,1,1,1,1,1,1]
,则结果的第一行将是 [2,3,4,5,6,7,8,9,10,1]
。如果您觉得很难理解,请尝试转置 W*x
.
回答您的问题,
Does Tensorflow automatically perform the softmax operation for each column matrix in x?
是的,在您的上下文中。 TensorFlow 将 softmax
应用于维度 1
的所有元素(我上面解释中的所有行)。因此,您得到的 softmax
结果也将具有维度 ? x 10
.
Am I correct in assuming [None, value] means, intuitivly, an array of variable size with each element being an array of size value? Or is it possible for [None, value] to also mean just an array of size value? ( without it being in a container array )
是的,前者是正确的解释。另请参阅上面我的 ?
矩阵类比。
What is the correct way to link the theoretical description, where x is a column vector to the implementation, where x is an array of column matrices?
我个人将其解释为 W*x
的转置。详细说明,令 x
为列向量的数量,[x1 x2 x3 x4 x5 ...]
具有维度 784 x ?
,其中 ?
是批量大小。让 W
有一个维度 10 x 784
。如果在每一列上应用 W
,您将得到 [W*x1 W*x2 W*x3...]
或多个维度 10
的列向量,给出净矩阵维度 10 x ?
.
对整个操作进行转置,trans(W*x) = trans(x)*trans(W)
,即您代码中的 x
和 W
。
我正在关注Tensorflow MNIST tutorial。
通读了理论/直觉部分,我开始理解 x
输入是一个列矩阵。
其实在描述softmax
时,x
显示为一个列矩阵:
然而,在 tensorflow
中声明,x 看起来像这样:
x = tf.placeholder(tf.float32, [None, 784])
我读到这个 x
是一个可变长度的数组 ( None ),这个数组的每个元素都是一个大小为 784 的列矩阵。
即使 x
被声明为列矩阵数组,它也被当作列矩阵使用:
y = tf.nn.softmax(tf.matmul(x, W) + b)
在示例中,W
和b
被直观地声明为形状变量[784, 10]
和[10]
,这是有道理的。
我的问题是:
Tensorflow是否自动对x中的每一列矩阵进行softmax运算?
我是否正确地假设 [None, value] 意味着,直觉上,一个可变大小的数组,每个元素都是一个大小值的数组?或者 [None, value] 是否也可以表示大小值的数组? (不在容器数组中)
link 理论描述的正确方法是什么,其中 x 是实现的列向量,其中 x 是列矩阵数组?
感谢您的帮助!
直觉是针对单个输入样本的(这就是您看到列向量的原因)。然而在实践中,训练是使用由许多输入样本组成的小批量完成的。 (取决于 batch_size
)。
x = tf.placeholder(tf.float32, [None, 784])
此行构成一个维度为 ? x 784
的矩阵,其中 ?
表示批量大小。从某种意义上说,列向量已成为这个新矩阵的行。
由于我们已将列向量转换为行,因此我们交换了 x
和 W
的乘法顺序。这就是为什么 W
的维度为 784 x 10
而 b
的维度 10
将应用于所有元素。
在第一次乘法之后,x*W
有一个维度 ? x 10
。 x*W
的每一行都添加了相同的元素 b
。因此,如果我的 x*W
的第一行是 [1,2,3,4,5,6,7,8,9,0]
并且 b
是 [1,1,1,1,1,1,1,1,1,1]
,则结果的第一行将是 [2,3,4,5,6,7,8,9,10,1]
。如果您觉得很难理解,请尝试转置 W*x
.
回答您的问题,
Does Tensorflow automatically perform the softmax operation for each column matrix in x?
是的,在您的上下文中。 TensorFlow 将 softmax
应用于维度 1
的所有元素(我上面解释中的所有行)。因此,您得到的 softmax
结果也将具有维度 ? x 10
.
Am I correct in assuming [None, value] means, intuitivly, an array of variable size with each element being an array of size value? Or is it possible for [None, value] to also mean just an array of size value? ( without it being in a container array )
是的,前者是正确的解释。另请参阅上面我的 ?
矩阵类比。
What is the correct way to link the theoretical description, where x is a column vector to the implementation, where x is an array of column matrices?
我个人将其解释为 W*x
的转置。详细说明,令 x
为列向量的数量,[x1 x2 x3 x4 x5 ...]
具有维度 784 x ?
,其中 ?
是批量大小。让 W
有一个维度 10 x 784
。如果在每一列上应用 W
,您将得到 [W*x1 W*x2 W*x3...]
或多个维度 10
的列向量,给出净矩阵维度 10 x ?
.
对整个操作进行转置,trans(W*x) = trans(x)*trans(W)
,即您代码中的 x
和 W
。