[英]What does the MNIST tensorflow tutorial mean with matmul flipping trick?
《 实现回归》中有关MNIST的ML入门教程,展示了如何在单行上进行回归,然后进行解释,其中提到了技巧的使用(强调我的意思):
y = tf.nn.softmax(tf.matmul(x, W) + b)
首先,我们用表达式
tf.matmul(x, W)
将x乘以tf.matmul(x, W)
这是从我们在方程中乘以Wx时得到的乘积翻转过来的,这是处理x为具有多个输入的2D张量的一个小技巧 。
这有什么窍门,为什么我们要使用它?
好吧,这里没有把戏。 那条线基本上指向一个先前的方程式乘法顺序
# 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添加偏差(也可以是a)列向量)),即
y = W * x + b,其中y也是列向量。
从线性代数的角度来看,这是完全可以的。 但是现在分批培训就成为了重点,即一次培训多个培训实例。 为了理解这一点,最好不要将x(和y)视为维度M(和N)的向量,而是将其视为维度为Mx1(y为Nx1)的矩阵。 由于TensorFlow假定组成批处理的不同训练实例沿第零维度对齐,因此这里遇到麻烦,因为第零维度被一个实例的不同元素占据。 然后,诀窍是转置上述等式(请记住,乘积的转置也会切换两个转置对象的顺序):
y ^ T = x ^ T * W ^ T + b ^ T
这几乎是本教程中简短描述的内容。 请注意,现在y ^ T是尺寸为1xN的矩阵(实际上是行向量),而x ^ T是尺寸为1xM的矩阵(也是行向量)。 W ^ T是维度MxN的矩阵。 在本教程中,他们没有写x ^ T或y ^ T,而只是根据此转置方程式定义占位符。 我唯一不清楚的一点是,为什么他们没有定义b
“换位方式”。 我假设+
运算符会在必要时自动转置b
以获得正确的尺寸。
现在,其余的工作非常简单:如果批处理大于1个实例,则只需“堆叠”多个x
(1xM)矩阵,比如说是一个尺寸为(AxM)的矩阵(其中A为批处理大小)。 b
希望会自动广播到该数量的事件(即到维度矩阵(AxN)。如果您使用
y ^ T = x ^ T * W ^ T + b ^ T,
您将获得批次中每个元素的目标矩阵(AxN)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.