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 28 Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 Python
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Python爬取三国演义的实现方法
Sep 12 Python
python中学习K-Means和图片压缩
Nov 20 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
Python获取指定字符前面的所有字符方法
May 02 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
如何使用repr调试python程序
Feb 28 Python
python实现对变位词的判断方法
Apr 05 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 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
微信支付开发订单查询实例
2016/07/12 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
jQuery 更改checkbox的状态,无效的解决方法
2016/07/22 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
Three.js基础部分学习
2017/01/08 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
Vue.js实现输入框绑定的实例代码
2017/08/24 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
行政经理岗位职责
2013/11/09 职场文书
二年级体育教学反思
2014/01/15 职场文书
师德学习感言
2014/01/31 职场文书
小学教师师德感言
2014/02/10 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
失恋33天观后感
2015/06/11 职场文书
学前教育见习总结
2015/06/23 职场文书
2016大学迎新晚会开场白
2015/11/24 职场文书
Python极值整数的边界探讨分析
2021/09/15 Python
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android