如何使用 torch.stack?
How do I use torch.stack?
如何使用 torch.stack
堆叠两个形状为 a.shape = (2, 3, 4)
和 b.shape = (2, 3)
的张量而不进行就地操作?
堆叠需要相同数量的维度。一种方法是取消挤压和堆叠。例如:
a.size() # 2, 3, 4
b.size() # 2, 3
b = torch.unsqueeze(b, dim=2) # 2, 3, 1
# torch.unsqueeze(b, dim=-1) does the same thing
torch.stack([a, b], dim=2) # 2, 3, 5
使用 pytorch 1.2 或 1.4 arjoonn 的回答对我不起作用。
而不是 torch.stack
我在 pytorch 1.2 和 1.4 中使用了 torch.cat
:
>>> import torch
>>> a = torch.randn([2, 3, 4])
>>> b = torch.randn([2, 3])
>>> b = b.unsqueeze(dim=2)
>>> b.shape
torch.Size([2, 3, 1])
>>> torch.cat([a, b], dim=2).shape
torch.Size([2, 3, 5])
如果要使用 torch.stack
张量的维度必须相同:
>>> a = torch.randn([2, 3, 4])
>>> b = torch.randn([2, 3, 4])
>>> torch.stack([a, b]).shape
torch.Size([2, 2, 3, 4])
这是另一个例子:
>>> t = torch.tensor([1, 1, 2])
>>> stacked = torch.stack([t, t, t], dim=0)
>>> t.shape, stacked.shape, stacked
(torch.Size([3]),
torch.Size([3, 3]),
tensor([[1, 1, 2],
[1, 1, 2],
[1, 1, 2]]))
使用 stack
时,您可以使用 dim
参数指定在哪个维度上堆叠具有相同维度的张量。
假设你有两个维度相等的张量 a, b 即 a ( A, B, C) 所以 b (A, B, C)
一个例子
a=torch.randn(2,3,4)
b=torch.randn(2,3,4)
print(a.size()) # 2, 3, 4
print(b.size()) # 2, 3, 4
f=torch.stack([a, b], dim=2) # 2, 3, 2, 4
f
如果它们不一样暗淡,它就不会行动。小心!!
如何使用 torch.stack
堆叠两个形状为 a.shape = (2, 3, 4)
和 b.shape = (2, 3)
的张量而不进行就地操作?
堆叠需要相同数量的维度。一种方法是取消挤压和堆叠。例如:
a.size() # 2, 3, 4
b.size() # 2, 3
b = torch.unsqueeze(b, dim=2) # 2, 3, 1
# torch.unsqueeze(b, dim=-1) does the same thing
torch.stack([a, b], dim=2) # 2, 3, 5
使用 pytorch 1.2 或 1.4 arjoonn 的回答对我不起作用。
而不是 torch.stack
我在 pytorch 1.2 和 1.4 中使用了 torch.cat
:
>>> import torch
>>> a = torch.randn([2, 3, 4])
>>> b = torch.randn([2, 3])
>>> b = b.unsqueeze(dim=2)
>>> b.shape
torch.Size([2, 3, 1])
>>> torch.cat([a, b], dim=2).shape
torch.Size([2, 3, 5])
如果要使用 torch.stack
张量的维度必须相同:
>>> a = torch.randn([2, 3, 4])
>>> b = torch.randn([2, 3, 4])
>>> torch.stack([a, b]).shape
torch.Size([2, 2, 3, 4])
这是另一个例子:
>>> t = torch.tensor([1, 1, 2])
>>> stacked = torch.stack([t, t, t], dim=0)
>>> t.shape, stacked.shape, stacked
(torch.Size([3]),
torch.Size([3, 3]),
tensor([[1, 1, 2],
[1, 1, 2],
[1, 1, 2]]))
使用 stack
时,您可以使用 dim
参数指定在哪个维度上堆叠具有相同维度的张量。
假设你有两个维度相等的张量 a, b 即 a ( A, B, C) 所以 b (A, B, C) 一个例子
a=torch.randn(2,3,4)
b=torch.randn(2,3,4)
print(a.size()) # 2, 3, 4
print(b.size()) # 2, 3, 4
f=torch.stack([a, b], dim=2) # 2, 3, 2, 4
f
如果它们不一样暗淡,它就不会行动。小心!!