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]])
我正在尝试实现变形金刚,但卡在了一点。
假设我输入了形状为 [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]])