Pytorch - 堆栈维度必须完全相同?

时间:2018-05-17 14:53:43

标签: python-3.x reshape pytorch tensor

在pytorch中,给定a形状(1X11)和形状b (1X11)的张量torch.stack((a,b),0)(2X11)会给我一个形状张量{{1} }}

但是,如果a的形状(2X11)b的形状为(1X11),则torch.stack((a,b),0)会引发错误。 “两个张量大小必须完全相同”。

因为两个张量是模型的输出(包含渐变),所以我无法将它们转换为numpy以使用np.stack()np.vstack()

是否有任何可能的解决方案至少使用GPU内存?

1 个答案:

答案 0 :(得分:10)

您似乎想要使用torch.cat()(沿现有维度连接张量)而不是torch.stack()(沿新维度连接/堆栈张量):

import torch

a = torch.randn(1, 42, 1, 1)
b = torch.randn(1, 42, 1, 1)

ab = torch.stack((a, b), 0)
print(ab.shape)
# torch.Size([2, 1, 42, 1, 1])

ab = torch.cat((a, b), 0)
print(ab.shape)
# torch.Size([2, 42, 1, 1])
aab = torch.cat((a, ab), 0)
print(aab.shape)
# torch.Size([3, 42, 1, 1])