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获取本地计算机名字的方法
Apr 29 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
Python3匿名函数lambda介绍与使用示例
May 18 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
matplotlib grid()设置网格线外观的实现
Feb 22 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
BBS(php & mysql)完整版(六)
2006/10/09 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
Mac下Supervisor进程监控管理工具的安装与配置
2014/12/16 Python
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
python函数超时自动退出的实操方法
2020/12/28 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
大一期末自我鉴定
2013/12/13 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
委托书的格式
2014/08/01 职场文书
教师党员自我剖析材料
2014/09/29 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
vue判断按钮是否可以点击
2022/04/09 Vue.js
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python
python 镜像环境搭建总结
2022/09/23 Python