2015-04-04 58 views
3

我挖了一块numpy的代码,并有一条线我不明白,在所有:numpy中以下操作的含义是什么?

W[:, :, None] * h[None, :, :] * diff[:, None, :] 

其中W¯¯^h差异是784x20,20X100和784x100矩阵。乘法结果是784x20x100数组,但我不知道这个计算实际做了什么,结果的含义是什么。

对于它的价值,该行是从机器学习相关的代码,W¯¯对应的神经网络的层的权重阵列,ħ是层活化,和DIFF是网络的目标和之间的差假设(从关于变换自编码器的Sida Wang's thesis)。

回答

5

对于NumPy数组,*对应于元素方式的乘法。为了使这项工作,这两个阵列必须是以下之一:

  • 相同的形状彼此
  • 使得一个阵列可以是broadcast到另一

一个阵列可以是如果在配对每个阵列的尾部尺寸时,每对中的长度相等或者其中一个长度为1,则向另一个广播。例如,以下阵列AB的形状为whi CH兼容广播:

A.shape == (20, 1, 3) 
B.shape ==  (4, 3) 

3等于3然后在A下一长度是1其可以与任何长度配对。 B的尺寸比A的尺寸更小并不重要。)

要使两个不兼容的数组彼此可以进行广播,可以将额外的尺寸插入到一个或两个数组中。使用Nonenp.newaxis为维度索引可将长度为1的额外维度插​​入到数组中。


让我们看看问题中的例子。蟒评估重复从左到右乘法:

  • W[:, :, None]具有形状(784, 20, 1)
  • h[None, :, :]具有形状( 1, 20, 100)

这些形状是根据上述说明broadcastable和倍增返回与形状(784, 20, 100)阵列。

  • 阵列形状从最后乘法,(784, 20, 100)
  • diff[:, None, :]具有(784, 1, 100)

的形状,从而第二乘法成功这两个阵列的这些形状是兼容的。返回形状为(784, 20, 100)的数组。

+0

谢谢,这是非常有帮助的。 – rocknrollnerd 2015-04-04 21:42:46

相关问题