解决pytorch下出现multi-target not supported at的一种可能原因


Posted in Python onFebruary 06, 2021

在使用交叉熵损失函数的时候,target的形状应该是和label的形状一致或者是只有batchsize这一个维度的。

如果target是这样的【batchszie,1】就会出现上述的错误。

改一下试试,用squeeze()函数降低纬度,

如果不知道squeeze怎么用的,

可以参考这篇文章。pytorch下的unsqueeze和squeeze用法

这只是一种可能的原因。

补充:pytorch使用中遇到的问题

1. load模型参数文件时,提示torch.cuda.is_available() is False。

按照pytorch官方网页又安装了一次pytorch,而不是直接使用清华源,执行pip install torch,暂时不知道为什么。

2. 使用CrossEntropyLoss时,要求第一个参数为网络输出值,FloatTensor类型,第二个参数为目标值,LongTensor类型。否则

需要在数据读取的迭代其中把target的类型转换为int64位的:target = target.astype(np.int64),这样,输出的target类型为torch.cuda.LongTensor。(或者在使用前使用Tensor.type(torch.LongTensor)进行转换)。

3.

RuntimeError: multi-target not supported at /pytorch/torch/lib/THCUNN/generic/ClassNLLCriterion.cu
loss += F.cross_entropy( scores, captions )

出错原因:

scores, captions的维度与F.cross_entropy()函数要求的维度不匹配,

例如出错的维度为scores=[batch, vocab_size], captions=[batch, 1]

解决:

loss += F.cross_entropy( scores, captions.squeeze() )

注,这个scores必须是N*C维,C指类别数。

4. pytorch训练过程中使用大量的CPU资源

当我使用pycharm运行 (https://github.com/Joyce94/cnn-text-classification-pytorch ) pytorch程序的时候,在Linux服务器上会开启多个进程,占用服务器的大量的CPU,在windows10上运行此程序的时候,本机的CPU和内存会被吃光,是因为在train.py中有大量的数据训练处理,会开启多个进程,占用大量的CPU和进程。

本机window10

解决pytorch下出现multi-target not supported at的一种可能原因

linux服务器开启了多个进程

解决pytorch下出现multi-target not supported at的一种可能原因

Linux服务器占用大量CPU

解决pytorch下出现multi-target not supported at的一种可能原因

在pytorch中提供了(http://pytorch.org/docs/master/multiprocessing.html)muliprocessing多进程管理,其中有Pool进程池、Process()等对进程进行管理,可能是我使用的方式不对,反正是没有什么效果。

然而最简单的也是最好的解决办法 :

torch.set_num_threads(int thread) ,可以很好的解决windows问题,参考(http://pytorch.org/docs/master/torch.html#parallelism) 然而,在linux服务器上还是有一些问题的,export OMP_NUM_THREADS = 1 可以解决Linux问题。

经验证:export OMP_NUM_THREADS=1确实在pycaffe/pytorch中可以有效降低CPU使用率且提高程序运行速度,考虑可能是程序并不需要这么大的计算量,但是开了很多线程并行进行相同的计算,最后还需要同步结果,浪费了大量的计算量。

5. 在pytorch框架下编译模块的时候遇到 in <module>

raise ImportError("torch.utils.ffi is deprecated. Please use cpp extensions instead.")
ImportError: torch.utils.ffi is deprecated. Please use cpp extensions instead.

解决:pytorch版本与其他库的版本不匹配。我当时装的是1.0.0,降低版本到0.4.0后问题解决。

6.pytorch设置GPU,os.environ['CUDA_VISIBLE_DEVICES']='X'要放在主程序的最前端,否则设置GPU可能无效。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
Python对列表排序的方法实例分析
May 16 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
Python实现基于POS算法的区块链
Aug 07 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
python交互模式基础知识点学习
Jun 18 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
Python爬虫之Selenium警告框(弹窗)处理
Dec 04 Python
Python实现照片卡通化
Dec 06 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 #Python
一文带你掌握Pyecharts地理数据可视化的方法
Feb 06 #Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 #Python
Python第三方库安装缓慢的解决方法
Feb 06 #Python
python中threading和queue库实现多线程编程
Feb 06 #Python
Python3爬虫ChromeDriver的安装实例
Feb 06 #Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 #Python
You might like
php基础教程 php内置函数实例教程
2012/08/21 PHP
php反射应用示例
2014/02/25 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript FormatNumber函数实现方法
2008/12/30 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
Javascript之BOM(window对象)详解
2016/05/25 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
three.js利用射线Raycaster进行碰撞检测
2020/03/12 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python中的anydbm模版和shelve模版使用指南
2015/07/09 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
2018/01/17 Python
python实现抠图给证件照换背景源码
2019/08/20 Python
实例代码讲解Python 线程池
2020/08/24 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
机械设计及其自动化专业推荐信
2013/10/31 职场文书
工程造价专业求职信
2014/07/17 职场文书
社区扶贫帮困工作总结
2015/05/20 职场文书
好人好事新闻稿
2015/07/17 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
MySQL数据库表约束讲解
2022/06/21 MySQL