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生成指定长度的随机数密码
Jan 23 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
利用Python获取操作系统信息实例
Sep 02 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
Python实现的计算器功能示例
Apr 26 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
Aug 22 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
简单的命令查看安装的python版本号
Aug 28 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 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过滤黑名单关键字的方法
2014/12/01 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
php实现socket推送技术的示例
2017/12/20 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jQuery实现带动画效果的二级下拉导航方法
2015/03/11 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
Flask模板引擎之Jinja2语法介绍
2019/06/26 Python
Python文件操作函数用法实例详解
2019/12/24 Python
Python安装OpenCV的示例代码
2020/03/05 Python
世界首屈一指的钓鱼用品商店:TackleDirect
2016/07/26 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
创立科技Java面试题
2015/11/29 面试题
办理暂住证介绍信
2014/01/11 职场文书
交通安全标语
2014/06/06 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书