我有张量列表每个张量有不同的大小如何使用pytroch将这个张量列表转换为张量
有关详细信息,我的列表包含张量,每个张量具有不同的大小为……
张量不能保存可变长度数据。你可能正在寻找 猫
例如,这里我们有一个列表,其中有两个具有不同大小的张量(在它们的最后一个暗淡(dim = 2))并且我们想要创建一个由它们两者组成的更大的张量,所以我们可以使用cat并创建一个更大的张量包含他们的两个数据。
另请注意,你不能在cpu上使用带有半张量的cat 马上 所以你应该将它们转换为float,进行连接然后转换回一半
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()
torch.cat([x.float() for x in sequence], dim=1).half()
Tensor 在pytorch不喜欢 List 在python中,它可以容纳可变长度的对象。
Tensor
List
在pytorch中,您可以将固定长度的数组传输到Tensor:
>>> torch.Tensor([[1, 2], [3, 4]]) >>> tensor([[1., 2.], [3., 4.]])
而不是:
>>> torch.Tensor([[1, 2], [3, 4, 5]]) >>> --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-16-809c707011cc> in <module> ----> 1 torch.Tensor([[1, 2], [3, 4, 5]]) ValueError: expected sequence of length 2 at dim 1 (got 3)
它也是一样的 torch.stack 。
torch.stack