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 相关文章推荐
php使用递归与迭代实现快速排序示例
Jan 23 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
Python 多线程抓取图片效率对比
Feb 27 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
对Django url的几种使用方式详解
Aug 06 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python几种常见算法汇总
Jun 02 Python
python如何写try语句
Jul 14 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
pytorch Dropout过拟合的操作
May 27 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
python迭代器实例简析
2014/09/25 Python
pandas.DataFrame 根据条件新建列并赋值的方法
2018/04/08 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
python3中rank函数的用法
2019/11/27 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
解决TensorFlow训练内存不断增长,进程被杀死问题
2020/02/05 Python
opencv 查找连通区域 最大面积实例
2020/06/04 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
Python命令行参数argv和argparse该如何使用
2021/02/08 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
PHP如何对用户密码进行加密
2014/07/31 面试题
四年大学生活的个人自我评价
2013/12/11 职场文书
竟聘演讲稿范文
2013/12/31 职场文书
函授自我鉴定范文
2014/02/06 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers