expected scalar type Long but found Int

报错信息

expected scalar type Long but found Int
或者
expected scalar type Long but found Float

报错场景

pytorch的分类,本例具体为torch.nn.CrossEntropyLoss

原因

pytorch的分类的loss函数的label的类型只能是torch.LongTensor类型(也是torch.int64类型),其他类型比如torch.int32,torch.float32等等会报错。
我自己的是从np.long转成tensor时,由于np.long也是np.int32,转成tensor是转成了torch.int32,所以会报错。
np和torch的long类型不能直接转换,它们之间不等价,因为前者是int32,后者是int64。

解决办法

把label类型改成torch.LongTensor类型即可:
label = label.type(torch.LongTensor) # 原来的label是torch.int32类型,转换后是torch.int64

代码示例


import numpy as np
import torch

a = [1,2,3]
a = np.array(a, dtype=np.long)
print(a.dtype)
new_a = torch.from_numpy(a.copy())
print(new_a.dtype)

another_a = new_a.type(torch.LongTensor)
print(another_a.dtype)

输出:

int32
torch.int32
torch.int64
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值