如何理解使用张量流的MNIST实验中的技巧?

时间:2017-06-29 08:41:17

标签: python tensorflow

我是Tensorflow的初学者。我对这个教程感到有点困惑。作者首先给出一个公式y = softmax(Wx + b),但在python代码中使用xW + b并解释它是一个小技巧。我不明白这个伎俩,为什么作者需要翻转公式呢?

  

https://www.tensorflow.org/get_started/mnist/beginners

     

首先,我们将x与W乘以表达式tf.matmul(x,W)。这是   当我们在我们的等式中乘以它们时,我们有Wx,   作为一个处理x的小技巧是一个具有多个的2D张量   投入。然后我们添加b,最后应用tf.nn.softmax。

3 个答案:

答案 0 :(得分:1)

从公式中可以看出,

y=softmax(Wx + b)

enter image description here

输入x乘以权重变量W,但在doc

y = tf.nn.softmax(tf.matmul(x, W) + b)
为了便于计算,

W乘以x ,因此我们必须将W从10 * 784翻转到784 * 10,并与公式保持一致。

答案 1 :(得分:0)

一般来说,机器学习,尤其是tensorflow,您总是希望您的第一个维度代表您的批次。这个技巧只是一种确保不在每次矩阵乘法之前和之后转置所有内容的方法。

x实际上不是要素的列向量,而是形状(batch_size, n_features)的二维矩阵。

如果您保留Wx,那么您将x转换为[{1}}形状x'),使用形状(n_features, batch_size) W }},(n_outputs, n_features)将具有Wx'的形状,因此您必须将其转置回(n_outputs, batch_size),这是您最终想要的。

如果您正在使用(batch_size, n_outputs),则tf.matmul(x, W)的形状为W,结果直接为(n_features, n_outputs )形。

答案 2 :(得分:0)

我同意这一点并不清楚。

  

x是具有多个输入的2D张量

是一种非常简洁的方式告诉您,在tensorflow中,数据存储在张量中,遵循不属于线性代数的约定。

特别是,最外层尺寸(即矩阵的列)始终是样本尺寸:即,它与样本数量的大小相同。

将样本要素存储在2D张量(矩阵)中时,要素因此存储在最内层维度(即线条)中。也就是说,张量x是等式中变量$ x $的转置。 Wb也是如此。事实x.T*W.T=(W.x).T解释了线性代数方程与其张量实现之间乘法的交换不一致。