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 24 Python
python计算方程式根的方法
May 07 Python
Python import用法以及与from...import的区别
May 28 Python
python使用win32com库播放mp3文件的方法
May 30 Python
Python简单实现的代理服务器端口映射功能示例
Apr 08 Python
Django 使用logging打印日志的实例
Apr 28 Python
Python使用re模块实现信息筛选的方法
Apr 29 Python
解决python线程卡死的问题
Feb 18 Python
Python参数类型以及常见的坑详解
Jul 08 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
使用PyCharm官方中文语言包汉化PyCharm
Nov 18 Python
python自动计算图像数据集的RGB均值
Jun 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
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
动态加载js、css的实例代码
2016/05/26 Javascript
10个经典的网页鼠标特效代码
2018/01/09 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
2016/07/08 Python
linux环境下python中MySQLdb模块的安装方法
2017/06/16 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python多线程实现TCP服务端
2019/09/03 Python
python def 定义函数,调用函数方式
2020/06/02 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
法国时尚童装网站:Melijoe
2016/08/10 全球购物
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
如何设置Java的运行环境
2013/04/05 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
八一建军节活动方案
2014/02/10 职场文书
党干部专题民主生活会对照检查材料思想汇报
2014/10/06 职场文书
暂停营业通知
2015/04/25 职场文书
2019年“我为祖国点赞”演讲稿(3篇)
2019/09/26 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Nginx进程调度问题详解
2021/09/25 Servers