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使用shelve模块实现简单数据存储的方法
May 20 Python
详解设计模式中的工厂方法模式在Python程序中的运用
Mar 02 Python
Python用模块pytz来转换时区
Aug 19 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
Python浅复制中对象生存周期实例分析
Apr 02 Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 Python
python每天定时运行某程序代码
Aug 16 Python
pytorch中的transforms模块实例详解
Dec 31 Python
Python文件时间操作步骤代码详解
Apr 13 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
pytorch简介
Nov 11 Python
如何用Python徒手写线性回归
Jan 25 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
append和appendTo的区别以及appendChild用法
2013/12/24 Javascript
Bootstrap图片轮播组件使用实例解析
2016/06/30 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
[10:05]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD 选手采访
2021/03/11 DOTA
python的id()函数介绍
2013/02/10 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Selenium python时间控件输入问题解决方案
2020/07/22 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
母亲节感恩寄语
2014/02/21 职场文书
运动会演讲稿100字
2014/08/25 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
赡养老人协议书范本
2015/08/06 职场文书
教师培训学习心得体会
2016/01/21 职场文书