下图形状是(3,2, 1),如何得到的? 第一层 [ ] 中含有3个元素, 单拿一个元素出来, 有2个元素, blabla…
从shape上理解更快。
axis=0,相当于拆除第1层 [ ] ,剩下元素shape会是 (2, 1)。下图中红框叠加sum起来就是这个形状。
axis=1,相当于拆除第2层 [ ] ,剩下元素shape会是 (3, 1)。
axis=2,相当于拆除第3层 [ ] ,剩下元素shape会是 (3, 2)。
代码:
pythonimport numpy as np
kl = [2, 2, 3, 3, 7, 7]
npa = np.asarray(kl).reshape((3, 2, 1))
print(npa)
print("--------")
print(np.sum(npa, axis=0))
print("--------")
print(np.sum(npa, axis=1))
print("--------")
print(np.sum(npa, axis=2))
Axis or axes along which a sum is performed.
这里的along 很关键,在很多库包里,无论叫 Axis 、axes 、dim , 都是指沿着哪一个dim去计算, 如果用shape去理解,会快一些。
比如在Softmax中:
pythonimport torch
from torch import nn
m = nn.Softmax(dim=1)
input = torch.randn(2, 3)
print(input)
output = m(input)
print(output)
得到:
tensor([[-0.6087, -0.5550, -0.2106], [-0.4120, 0.7185, -1.3630]]) tensor([[0.2822, 0.2977, 0.4201], [0.2230, 0.6908, 0.0862]])
Softmax的那个方向的数字加起来会是1,代码里面是(dim=1),也就是想形成的shape是(2,),去掉3。
所以是用 [-0.6087, -0.5550, -0.2106] 和 [-0.4120, 0.7185, -1.3630] 在算 Softmax。
结果也正是如此,[0.2822, 0.2977, 0.4201]或者 [0.2230, 0.6908, 0.0862] 加起来就是1 。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!