我有张量列表,每个张量都有不同的大小,如何使用 pytroch 将此张量列表转换为张量
有关更多信息,我的列表包含张量,每个张量都有不同的大小,例如第一个张量大小是 torch.Size([76080, 38])
其他张量的形状在第二个元素中会有所不同,例如列表中的第二个张量是 torch.Size([76080, 36])
当我使用 torch.tensor(x) 我得到一个错误 ValueError: only one element tensors can be convert to Python scalars
Sep*_*ius 11
张量不能保存可变长度的数据。你可能在找猫
例如,这里我们有一个包含两个不同大小的张量的列表(在它们的最后一个 dim(dim=2)),我们想创建一个由它们组成的更大的张量,所以我们可以使用 cat 并创建一个更大的张量包含他们的两个数据。
另请注意,截至目前,您不能在 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])
Run Code Online (Sandbox Code Playgroud)
你还没有解释你的目标,所以另一种选择是像这样使用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])
Run Code Online (Sandbox Code Playgroud)
编辑:在这种特殊情况下,您可以使用 torch.cat([x.float() for x in sequence], dim=1).half()
小智 5
Tensor在 pytorch 中不像List在 python 中,它可以保存可变长度的对象。
在 pytorch 中,您可以将固定长度的数组传输到 Tensor:
>>> torch.Tensor([[1, 2], [3, 4]])
>>> tensor([[1., 2.],
[3., 4.]])
Run Code Online (Sandbox Code Playgroud)
而不是:
>>> 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)
Run Code Online (Sandbox Code Playgroud)
也是一样的torch.stack。
| 归档时间: |
|
| 查看次数: |
37144 次 |
| 最近记录: |