t1 = torch.tensor([1,2,3])
t2 = torch.tensor([4,5,6])
t3 = torch.tensor([7,8,9])
torch.stack((t1,t2,t3),dim=1)
在实现 torch.stack() 时,我无法理解如何对不同的暗淡进行堆叠。
这里对列进行了堆叠,但我无法理解它是如何完成的细节。处理 2-d 或 3-D 张量变得更加复杂。
tensor([[1, 4, 7],
[2, 5, 8],
[3, 6, 9]])
想象一下有n
张量。如果我们停留在 3D 中,这些对应于体积,即长方体。堆叠对应于组合这些n
附加维度上的卷:这里添加了第四个维度来承载n
3D 卷。此操作与串联形成鲜明对比,在串联中,卷将被组合在现有维度之一。因此,三维张量的串联将产生 3D 张量。
以下是有限尺寸(最多三维输入)的堆叠操作的可能表示:
您选择执行堆叠的位置定义了堆叠将沿哪个新维度进行。在上面的例子中,新创建的维度是最后一个,因此这个想法“增加维度”更有意义。
在下面的可视化中,我们观察了张量如何堆叠在不同的轴上。这反过来又会影响最终的张量形状
-
例如,对于一维情况,它也可能发生在第一个轴上,如下所示:
附代码:
>>> x_1d = list(torch.empty(3, 2)) # 3 lines
>>> torch.stack(x_1d, 0).shape # axis=0 stacking
torch.Size([3, 2])
>>> torch.stack(x_1d, 1).shape # axis=1 stacking
torch.Size([2, 3])
-
类似地,对于二维输入:
附代码:
>>> x_2d = list(torch.empty(3, 2, 2)) # 3 2x2-squares
>>> torch.stack(x_2d, 0).shape # axis=0 stacking
torch.Size([3, 2, 2])
>>> torch.stack(x_2d, 1).shape # axis=1 stacking
torch.Size([2, 3, 2])
>>> torch.stack(x_2d, 2).shape # axis=2 stacking
torch.Size([2, 2, 3])
有了这种心态,你就可以直观地将运算扩展到n维张量。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)