解决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 相关文章推荐
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
Python3中类、模块、错误与异常、文件的简易教程
Nov 20 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
pandas对dataFrame中某一个列的数据进行处理的方法
Jul 08 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python 模拟贷款卡号生成规则过程解析
Aug 30 Python
python3多线程知识点总结
Sep 26 Python
用python求一重积分和二重积分的例子
Dec 06 Python
使用TensorFlow搭建一个全连接神经网络教程
Feb 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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
php中数组最简单的使用方法
2020/12/27 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
js date 格式化
2017/02/15 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
vue.js this.$router.push获取不到params参数问题
2020/03/03 Javascript
基于python select.select模块通信的实例讲解
2017/09/21 Python
python中的set实现不重复的排序原理
2018/01/24 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Python3中在Anaconda环境下安装basemap包
2018/10/21 Python
python输出决策树图形的例子
2019/08/09 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
德国帽子专家:Hutshopping
2019/11/03 全球购物
什么是继承
2013/12/07 面试题
外科实习自我鉴定
2013/10/06 职场文书
幼儿园托班开学寄语
2014/01/18 职场文书
汽车促销活动方案
2014/03/31 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js