PyTorch变量转Tensor后标签张量为空无元素问题求助
问题原因
- 核心错误是误用了
torch.Tensor()的参数规则:torch.Tensor()是PyTorch浮点张量的类构造方法,当传入单个整数参数时,会生成一个对应长度的空一维张量。你传入的标签是标量0,因此直接生成了torch.Size([0])的空张量,和你预期的「将标量0转为张量」的逻辑完全不符。 - 补充验证:你可以尝试传入label=3测试,
torch.Tensor(3)会返回一个长度为3的未初始化浮点张量,同样不会返回值为3的标量张量。
解决方案
以下3种修正方案任选其一即可:
- 使用小写开头的
torch.tensor()工厂方法,该方法会自动把输入标量转为对应值的张量,同时可直接指定数据类型,是最推荐的写法:
label = torch.tensor(label, dtype=torch.long)
- 将标量标签放入列表中再传入
torch.Tensor(),让方法识别为张量的内容而非维度参数:
label = torch.Tensor([label]).long()
- 使用
torch.as_tensor()方法,兼容标量输入,同时可自动匹配输入数据类型,避免不必要的内存拷贝:
label = torch.as_tensor(label, dtype=torch.long)
内容的提问来源于stack exchange,提问作者patrick823
相关产品推荐
相关产品推荐

