首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将张量列表转换为张量pytorch

将张量列表转换为张量pytorch
EN

Stack Overflow用户
提问于 2019-03-08 02:40:49
回答 2查看 42.3K关注 0票数 14

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

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-09 02:42:50

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

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

还请注意,对于right now,您不能在cpu上使用带有半张量的cat,因此您应该将它们转换为浮点型,进行连接,然后再转换回半张量

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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()

票数 11
EN

Stack Overflow用户

发布于 2019-03-08 15:41:18

pytorch中的Tensor不像python中的List,它可以容纳可变长度的对象。

在pytorch中,您可以将固定长度的数组传输给张量:

代码语言:javascript
运行
复制
>>> torch.Tensor([[1, 2], [3, 4]])
>>> tensor([[1., 2.],
            [3., 4.]])

而不是:

代码语言:javascript
运行
复制
>>> 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来说也是如此。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55050717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档