Python MNIST tensorflow教程对matmul翻转技巧意味着什么?

Python MNIST tensorflow教程对matmul翻转技巧意味着什么?,python,tensorflow,Python,Tensorflow,中关于MNIST for ML初学者的教程介绍了如何在一行上进行回归,随后介绍了技巧的使用(重点是我的): 首先,我们用表达式tf.matmul(x,W)将x乘以W。当我们在方程中将它们相乘时,我们将Wx作为一个小技巧来处理x是一个具有多个输入的二维张量 这里的诀窍是什么?我们为什么要使用它?嗯,这里没有诀窍。这条线基本上指向前面的一个等式乘法顺序 # Here the order of W and x, this equation for single example y = Wx +b #

中关于MNIST for ML初学者的教程介绍了如何在一行上进行回归,随后介绍了技巧的使用(重点是我的):

首先,我们用表达式
tf.matmul(x,W)
将x乘以W。当我们在方程中将它们相乘时,我们将Wx作为一个小技巧来处理x是一个具有多个输入的二维张量


这里的诀窍是什么?我们为什么要使用它?

嗯,这里没有诀窍。这条线基本上指向前面的一个等式乘法顺序

# Here the order of W and x, this equation for single example
y = Wx +b
# if you want to use batch of examples you need the change the order of multiplication; instead of using another transpose op
y = xW +b
# hence
y = tf.matmul(x, W)

好的,我认为主要的一点是,如果你分批训练(即一次训练多个训练集实例),TensorFlow总是假设
x
的第零维表示每批的事件数

假设您希望将维度M的训练实例映射到维度N的目标实例。您通常会将x(列向量)乘以NxM矩阵(并且,可选地,将偏差与维度N(也是列向量)相加),即

y=W*x+b,其中y也是一个列向量

从线性代数的角度来看,这是完全正确的。但现在的重点是分批培训,即同时使用多个培训实例进行培训。 要理解这一点,最好不要将x(和y)视为维度M(和N)的向量,而将其视为维度Mx1(和Nx1表示y)的矩阵。 由于TensorFlow假设组成一个批的不同训练实例沿着第零维对齐,因此我们在这里遇到了麻烦,因为第零维被单个实例的不同元素占用。 然后,诀窍是将上述方程进行转置(记住,乘积的转置也会切换两个转置对象的顺序):

y^T=x^T*W^T+b^T

这与本教程中简短描述的内容基本相同。 请注意,y^T现在是维度为1xN的矩阵(实际上是行向量),而x^T是维度为1xM的矩阵(也是行向量)。W^T是维数MxN的矩阵。在本教程中,他们没有编写x^T或y^T,只是根据这个转置公式定义了占位符。我唯一不清楚的一点是为什么他们没有定义“转置方式”。我假设
+
运算符会在必要时自动转置
b
,以获得正确的尺寸

剩下的事情现在很简单:如果批处理大于1个实例,只需“叠加”多个
x
(1xM)矩阵,比如一个维度矩阵(AxM)(其中a是批处理大小)
b
有望自动广播到这个数量的事件(这意味着到维度矩阵(AxN)

y^T=x^T*W^T+b^T


您将获得批次中每个元素的目标(AxN)矩阵。

您能提供更多上下文吗?您从哪里引用的?在“实施回归”下。对不起,我对这一点很陌生,但您能解释一下为什么在使用批次示例时必须颠倒顺序吗?或者告诉我在哪里可以了解更多信息?
# Here the order of W and x, this equation for single example
y = Wx +b
# if you want to use batch of examples you need the change the order of multiplication; instead of using another transpose op
y = xW +b
# hence
y = tf.matmul(x, W)