Pytorch中的水平堆叠

Horizontal stacking in Pytorch

我正在尝试实现变形金刚,但卡在了一点。

假设我输入了形状为 [2,20] 的序列,其中 2 是样本数, 20是序列中的单词数(序列长度)。

因此,我创建了一个形状为 [1,20] 的数组,如 [0,1,2, ... 19]。现在我想堆叠它,最终形状应该是 [2,20] 以符合输入序列。喜欢下面

[[0,1,2, ... 19],
[0,1,2, ... 19]]

有手电筒功能吗?我可以循环创建数据和数组,但我想避免它。

如果你要叠加的张量是[1,20]的形状,你可以使用torch.cat()

t1 = torch.zeros([1,5]) # tensor([[0., 0., 0., 0., 0.]])
t2 = torch.ones([1,5]) # tensor([[1., 1., 1., 1., 1.]])

torch.cat([t1, t2]) # tensor([[0., 0., 0., 0., 0.],
                              [1., 1., 1., 1., 1.]])

如果张量是一维的,您可以简单地使用 torch.stack()

t1 = torch.zeros([5]) # tensor([0., 0., 0., 0., 0.])
t2 = torch.ones([5]) # tensor([1., 1., 1., 1., 1.])

torch.stack([t1, t2]) # tensor([[0., 0., 0., 0., 0.],
                                [1., 1., 1., 1., 1.]])

现在,对于您的情况的更短方法,您可以这样做:

torch.arange(0,20).repeat(2,1) # tensor([[0,1,2, ... 19],
                                         [0,1,2, ... 19]])