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搭建HTTP服务器和FTP服务器
Mar 09 Python
Python生成随机密码的方法
Jun 16 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
Python rstrip()方法实例详解
Nov 11 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
Python中的十大图像处理工具(小结)
Jun 10 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
详解python播放音频的三种方法
Sep 23 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
Python常用断言函数实例汇总
Nov 30 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
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
php遍历CSV类实例
2015/04/14 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
php生成微信红包数组的方法
2019/09/05 PHP
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
jquery比较简洁的软键盘特效实现方法
2015/03/19 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
基于AngularJS的简单使用详解
2017/09/10 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
如何自动化部署项目?折腾服务器之旅~
2019/04/16 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python中的pprint折腾记
2015/01/21 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
基于Python socket的端口扫描程序实例代码
2018/02/09 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
大学在校生求职信范文
2013/11/21 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
个人承诺书格式范文
2015/04/29 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS