解决:RuntimeError: Expected object of scalar type Int but got scalar type Double

问题描述:

最近在写使用神经网络预测的代码,在更换导入的数据后,原本的loss函数(如下所示)报错RuntimeError: Expected object of scalar type Int but got scalar type Double。后来根据CSDN上的许多博文尝试使用众多方法,例如:loss函数前面加X=torch.tensor(np.int(X))或者y=torch.IntTensor(y),但是之后又出现“ValueError: only one element tensors can be converted to Python scalar等报错,于是根据其它博文更改为X= torch.tensor([item.cpu().detach().numpy() for item in np.int(X)]).cuda(),于是又回到上述的报错,让人头疼不已。

    for X,y in data_iter(batch_size,train_feature,train_label):#内循环训练一个batch
        l=loss(X,y).sum()  #计算模型输出与真实数据之间的差距

解决方案:

  • 第一种方案:其实解决该问题十分简单,由于导入的表格后缀名为xlsx(即:正常的Excel文件),只要将该文件另存为csv格式即可(需要注意的是,读取个数必须为utf-8,否则在读取时会由于csv中的编码格式是‘ANSI’,而Python
    3默认读取格式为‘utf-8’,导致decode异常。因此会导致产生报错’utf-8’ codec can’t decode bytes
    in position 16: invalid continuation byte)。
    在将后缀名由xlsx改为csv后,顺利读取文件并进行训练,中途没有再产生任何其它报错(ヾ(◍°∇°◍)ノ゙开森森~开森森~)
  • 第二种方案:可能是由于数据的问题,只要在Excel后面加上几行没用的数据,在使用时Python不去读取它们,然后就可以顺利使用了(这个办法亲测有效,但是博主目前还不明白为什么,有知道的大佬欢迎在评论区里交流)。

修改理由:

1、CSV是纯文本文件,excel不是纯文本,excel包含很多格式信息在里面。即:CSV是纯文本文件,CSV文件在windows平台默认的打开方式是excel,但是它的本质是一个文本文件。excel不是纯文本,Excel是一个二进制文件,它保存有关工作簿中所有工作表的信息。因此,csv文件更加地纯粹。
其它理由:
1、CSV文件的体积会更小,创建分发读取更加方便,适合存放结构化信息,比如记录的导出,流量统计等等。
2、由于数值和文本之间没有明确的区别或区分,Excel可以使用自动格式化功能搞乱数值。
CSV是比较安全的,可以清楚地区分数值和文本。CSV不处理数据并按原样存储。
3、Excel导入数据时消耗更多的内存。导入CSV文件可以更快,而且消耗更少的内存。
4、Excel文件只能用Microsoft Excel文档打开。CSV可以用Windows中的任何文本编辑器打开,如记事本,MS Excel,Microsoft Works 9等。

参考文献:

https://www.cnblogs.com/Dongmy/p/16434120.html
https://blog.csdn.net/qq_38703529/article/details/120216078
https://blog.csdn.net/qq_18649781/article/details/90771682
https://blog.csdn.net/qq_38703529/article/details/120216078
https://blog.csdn.net/yzf0011/article/details/93321576

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值