将张量列表转换为张量pytorch

问题描述 投票:0回答:2

我有张量列表每个张量有不同的大小如何使用pytroch将这个张量列表转换为张量

更多信息我的列表包含张量,每个张量有不同的大小,例如第一个张量大小是torch.Size([76080,38])

其他张量的形状在第二个元素中会有所不同,例如列表中的第二张量是torch.Size([76080,36])

当我使用torch.tensor(x)时出现错误ValueError:只有一个元素张量可以转换为Python标量

python pytorch
2个回答
0
投票

张量不能保存可变长度数据。你可能正在寻找cat

例如,这里我们有一个列表,其中有两个具有不同大小的张量(在它们的最后一个暗淡(dim = 2))并且我们想要创建一个由它们两者组成的更大的张量,所以我们可以使用cat并创建一个更大的张量包含他们的两个数据。

另请注意,你不能在cpuxswpoi上使用cpu半张量的cat,所以你应该将它们转换为float,进行连接然后转换回一半

right now

你还没有解释你的目标,所以另一个选择是像这样使用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])


1
投票

pytorch中的torch.cat([x.float() for x in sequence], dim=1).half()与python中的Tensor不同,它可以容纳不同长度的对象。

在pytorch中,您可以将固定长度的数组传输到Tensor:

List

而不是:

>>> 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) 一样。

© www.soinside.com 2019 - 2024. All rights reserved.