2017-08-06 52 views
1

为ML初学者对MNIST的教程,在Implementing the Regression,展示如何使提及了一招在同一行回归,其次是解释(重点煤矿):MNIST tensorflow教程是什么意思与matmul翻转技巧?

y = tf.nn.softmax(tf.matmul(x, W) + b) 

第一,我们乘以W乘以表达式tf.matmul(x, W)。当我们将它们乘以我们的Wx公式时,我们将其翻转为小技巧来处理x是具有多个输入的2D张量。

这里有什么窍门,我们为什么要使用它?

+0

你能提供更多的上下文吗?你从哪里引用? –

+0

[link](https://www.tensorflow.org/get_started/mnist/beginners)在“落实回归”下。 – ddgg007

回答

1

嗯,这里没有任何窍门。这条线主要指一个以前的方程乘法为了

# 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) 
+0

对不起,我真的很陌生,但是你能解释为什么在使用一批例子时必须颠倒这个顺序吗?或者将我指向我可以学习更多的地方? – ddgg007

1

好吧,我认为主要的一点是,如果你在分批培养(即列车设置在一次训练的几个实例),TensorFlow总是假定x的第零维表示每批事件的数量。

假设您想要将维度M的训练实例映射到维度N的目标实例。您通常可以通过将x(列向量)与NxM矩阵相乘来实现此目的(并且可选地添加维度N(也是列向量)),即

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

从线性代数的角度看,这是完全正确的。但是现在批量训练已经开始了,即一次训练了几个训练实例。 为了理解这点,不要将x(和y)看作维度M(和N)的向量,而是将维度看作Mx1(和Nx1)的矩阵。 由于TensorFlow假定组成批次的不同训练实例沿着第零维对齐,所以我们在这里陷入困境,因为第零维由一个单一实例的不同元素占据。 诀窍是然后以调换上述等式(记得产品的该换位也切换所述两个转置对象的顺序):

Y 1 T = X^T * w^T + B^T

这几乎是本教程中简要描述的内容。 请注意,y^T现在是维1xN(实际上是行向量)的矩阵,而x^T是维1xM(也是行向量)的矩阵。 W^T是维数为M×N的矩阵。在教程中,他们没有写x^T或y^T,而是根据这个转置方程简单地定义了占位符。唯一不清楚的是为什么他们没有定义b这个“转置方式”。我假设+运营商自动转换b如果有必要,以获得正确的尺寸。其余部分现在很容易:如果批次大于1个实例,则只需“堆积”多个x(1xM)矩阵,即对维度矩阵(AxM)(其中A是批量大小)。将有希望自动广播到这个事件数量(这意味着维度矩阵(AxN))。如果然后使用

Y 1 T = X^T * w^T + B^T,

你会得到一个目标的一个(AXN)矩阵批次的每个元素。