我有张量列表,每个张量都有不同的大小,如何使用 pytroch 将此张量列表转换为张量
有关更多信息,我的列表包含张量,每个张量都有不同的大小
例如第一个张量大小是 torch.Size([76080, 38])
其他张量的形状在第二个元素中会有所不同,例如列表中的第二个张量是 torch.Size([76080, 36])
当我使用
火炬张量(x)
我收到一个错误
ValueError:只有一个元素张量可以转换为 Python 标量
最佳答案
张量不能保存可变长度数据。您可能正在寻找 cat
例如,这里我们有一个包含两个不同大小的张量的列表(在它们的最后一个 dim(dim=2)),我们想创建一个由它们组成的更大的张量,所以我们可以使用 cat 并创建一个更大的张量包含他们的两个数据。
另请注意,从 right now 开始,您不能在 cpu 上使用带有半张量的 cat,因此您应该将它们转换为浮点数,进行连接,然后再转换回半张量
import torch
a = torch.arange(8).reshape(2, 2, 2)
b = torch.arange(12).reshape(2, 2, 3)
my_list = [a, b]
my_tensor = torch.cat([a, b], dim=2)
print(my_tensor.shape) #torch.Size([2, 2, 5])
你还没有解释你的目标,所以另一种选择是使用 pad_sequence 像这样:
from torch.nn.utils.rnn import pad_sequence
a = torch.ones(25, 300)
b = torch.ones(22, 300)
c = torch.ones(15, 300)
pad_sequence([a, b, c]).size() #torch.Size([25, 3, 300])
编辑:在这种特殊情况下,您可以使用
torch.cat([x.float() for x in sequence], dim=1).half()
关于python - 将张量列表转换为张量 pytorch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55050717/