pytorch训练数据类型错误

RuntimeError: expected scalar type Long but found Float
先了解一个知识:torch.Tensor默认是torch.FloatTensor是32位浮点类型数据,torch.LongTensor是64位整型。
读取pandas数据后,在进行分类处理时,都是默认给定的torch.Tensor,如下:

X_train = torch.tensor(X_train.values)
y_train = torch.tensor(y_train.values)

X_test = torch.tensor(X_test.values)
y_test = torch.tensor(y_test.values)

这个默认是根据X_train.values和y_train.values的数据类型来的,

X_train.dtype为torch.int64
y_train.dtype为torch.int64

我们再看看模型的权重值的类型:

for name, param in model.named_parameters():
    print(name,'-->',param.type(),'-->',param.dtype,'-->',param.shape)

结果:

linear_relu_stack.0.weight --> torch.FloatTensor --> torch.float32 --> torch.Size([512, 784])
linear_relu_stack.0.bias --> torch.FloatTensor --> torch.float32 --> torch.Size([512])
linear_relu_stack.2.weight --> torch.FloatTensor --> torch.float32 --> torch.Size([512, 512])
linear_relu_stack.2.bias --> torch.FloatTensor --> torch.float32 --> torch.Size([512])
linear_relu_stack.4.weight --> torch.FloatTensor --> torch.float32 --> torch.Size([10, 512])
linear_relu_stack.4.bias --> torch.FloatTensor --> torch.float32 --> torch.Size([10])

可以看出权重值的类型是float32,所以这里有两个问题需要解决:
第一、把输入的数据类型变为float32的;
第二、把y值标签变为64位整型。
所以修改代码如下:

X_train = torch.tensor(X_train.values,dtype=torch.float)
y_train = torch.LongTensor(y_train.values)

X_test = torch.tensor(X_test.values,dtype=torch.float)
y_test = torch.LongTensor(y_test.values)

再看看此时的值:

X_train.dtype为torch.float32
y_train.dtype为torch.int64

这样模型就能跑通了。
如图:
在这里插入图片描述
对应的ipynb代码链接:https://gitee.com/rengarwang/pytorch-coding/blob/master/pytorch_pandas_test.ipynb

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值