pytorch 梯度NAN异常值的解决方案


Posted in Python onJune 05, 2021

pytorch 梯度NAN异常值

gradient 为nan可能原因:

1、梯度爆炸

2、学习率太大

3、数据本身有问题

4、backward时,某些方法造成0在分母上, 如:使用方法sqrt()

定位造成nan的代码:

import torch
# 异常检测开启
torch.autograd.set_detect_anomaly(True)
# 反向传播时检测是否有异常值,定位code
with torch.autograd.detect_anomaly():
 loss.backward()

pytorch处理inf和nan数值

在构建网络框架后,运行代码,发现很多tensor出现了inf值或者nan,在很多博客上没有找到对应的解决方法,大部分是基于numpy写的,比较麻烦。

下面基于torch BIF函数实现替换这2个值。

a = torch.Tensor([[1, 2, np.nan], [np.inf, np.nan, 4], [3, 4, 5]])
 
a
Out[158]: 
tensor([[1., 2., nan],
        [inf, nan, 4.],
        [3., 4., 5.]])

下面把nan值还为0:

a = torch.where(torch.isnan(a), torch.full_like(a, 0), a)
 
a
Out[160]: 
tensor([[1., 2., 0.],
        [inf, 0., 4.],
        [3., 4., 5.]])

接着把inf替换为1:

a = torch.where(torch.isinf(a), torch.full_like(a, 0), a)
 
a
Out[162]: 
tensor([[1., 2., 0.],
        [0., 0., 4.],
        [3., 4., 5.]])

简单回顾

tips:对于某些tensor,可能已经开启了grad功能,需要把它先转为普通tensor(使用.data)

torch.where(condition,T,F) 函数有三个输入值,

第一个是判断条件,

第二个是符合条件的设置值,

第三个是不符合条件的设置值

torch.full_like(input, fill_value, …) 返回与input相同size,单位值为fill_value的矩阵
 
#如下面这个例子,a为3*3的tensor
b =torch.full_like(a, 0,)
 
b
Out[165]: 
tensor([[0., 0., 0.],
        [0., 0., 0.],
        [0., 0., 0.]])

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的Django框架中用流响应生成CSV文件的教程
May 02 Python
python简单实现旋转图片的方法
May 30 Python
Python多进程分块读取超大文件的方法
Apr 13 Python
python虚拟环境virtualenv的使用教程
Oct 20 Python
如何利用python查找电脑文件
Apr 27 Python
python绘制直线的方法
Jun 30 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Pyspark获取并处理RDD数据代码实例
Mar 27 Python
django中related_name的用法说明
May 20 Python
pytorch 权重weight 与 梯度grad 可视化操作
PyTorch 如何检查模型梯度是否可导
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 #Python
pytorch 预训练模型读取修改相关参数的填坑问题
Jun 05 #Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 #Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 #Python
You might like
php入门学习知识点三 PHP上传
2011/07/14 PHP
tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析
2020/02/11 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
Python输出9*9乘法表的方法
2015/05/25 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python内置函数OCT详解
2016/11/09 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
python实现操作文件(文件夹)
2019/10/31 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
html5开发之viewport使用
2013/10/17 HTML / CSS
MYSQL支持事务吗
2013/08/09 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
医学院毕业生自荐信
2013/11/08 职场文书
业绩考核岗位职责
2014/02/01 职场文书
《孔子游春》教学反思
2014/02/25 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
部门2014年度工作总结
2014/11/12 职场文书
工作表现证明
2015/06/15 职场文书
JS的深浅复制详细
2021/10/16 Javascript