场景:数据集:官方的fashionminst + 网络:alexnet+pytroch+relu激活函数
源代码:https://zh-v2.d2l.ai/chapter_convolutional-modern/alexnet.html
知识点:梯度爆炸,梯度弥散
学习文献(向大佬看齐)有:

https://zh-v2.d2l.ai/chapter_multilayer-perceptrons/numerical-stability-and-init.html
https://www.bilibili.com/video/BV1X44y1r77r?spm_id_from=333.999.0.0&vd_source=d49d528422c02c473340ce042b8c8237
https://zh-v2.d2l.ai/chapter_convolutional-modern/alexnet.html
https://www.bilibili.com/video/BV1u64y1i75a?p=2&vd_source=d49d528422c02c473340ce042b8c8237

实验现象:

现象一

1、代码一开始运行就出现以下情况

现象二

2、我尝试把学习率调小之后,中途出现loss nan

现象三

群友a:有时候跑没什么问题,网络也没改什么,有时候出现loss nan,有时候不出现
群友b:可能原因:随机初始化变量值的影响
群友a:尝试解决办法:换了随机种子,出现的轮次只是变后了

我的最短路径解决办法:加入BN层(吃的到老鼠的就是好猫,hhh)

https://zh-v2.d2l.ai/chapter_convolutional-modern/batch-norm.html
def batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum):# 通过is_grad_enabled来判断当前模式是训练模式还是预测模式if not torch.is_grad_enabled():# 如果是在预测模式下,直接使用传入的移动平均所得的均值和方差X_hat = (X - moving_mean) / torch.sqrt(moving_var + eps)else:assert len(X.shape) in (2, 4)if len(X.shape) == 2:# 使用全连接层的情况,计算特征维上的均值和方差mean = X.mean(dim=0)var = ((X - mean) ** 2).mean(dim=0)else:# 使用二维卷积层的情况,计算通道维上(axis=1)的均值和方差。# 这里我们需要保持X的形状以便后面可以做广播运算mean = X.mean(dim=(0, 2, 3), keepdim=True)var = ((X - mean) ** 2).mean(dim=(0, 2, 3), keepdim=True)# 训练模式下,用当前的均值和方差做标准化X_hat = (X - mean) / torch.sqrt(var + eps)# 更新移动平均的均值和方差moving_mean = momentum * moving_mean + (1.0 - momentum) * meanmoving_var = momentum * moving_var + (1.0 - momentum) * varY = gamma * X_hat + beta  # 缩放和移位return Y, moving_mean.data, moving_var.dataclass BatchNorm(nn.Module):# num_features:完全连接层的输出数量或卷积层的输出通道数。# num_dims:2表示完全连接层,4表示卷积层def __init__(self, num_features, num_dims):super().__init__()if num_dims == 2:shape = (1, num_features)else:shape = (1, num_features, 1, 1)# 参与求梯度和迭代的拉伸和偏移参数,分别初始化成1和0self.gamma = nn.Parameter(torch.ones(shape))self.beta = nn.Parameter(torch.zeros(shape))# 非模型参数的变量初始化为0和1self.moving_mean = torch.zeros(shape)self.moving_var = torch.ones(shape)def forward(self, X):# 如果X不在内存上,将moving_mean和moving_var# 复制到X所在显存上if self.moving_mean.device != X.device:self.moving_mean = self.moving_mean.to(X.device)self.moving_var = self.moving_var.to(X.device)# 保存更新过的moving_mean和moving_varY, self.moving_mean, self.moving_var = batch_norm(X, self.gamma, self.beta, self.moving_mean,self.moving_var, eps=1e-5, momentum=0.9)return Y

csdn的其他解决办法

原理一

https://www.bilibili.com/video/BV1u64y1i75a?p=2&vd_source=d49d528422c02c473340ce042b8c8237
1、梯度求导+链式法则


1.1、relu激活函数求导性质+梯度爆炸


1、relu的激活函数的导数1或0
2、梯度爆炸:由于导数的链式法则,连续多层大于1的梯度相乘会使梯度越来越大,最终导致梯度太大的问题。
3、梯度爆炸 会使得某层的参数w过大,造成网络不稳定,极端情况下,数据乘以一个大w发生溢出,得到NAN值。

1.2、梯度爆炸的问题:

2.1、sigmoid 激活函数求导性质+梯度消失

1、由于导数的链式法则,在连续的层中,将小于1的梯度相乘会使梯度越来越小,最终在一层中梯度为0。

2.2、梯度消失的问题:


实验现象分析:
1、relu激活函数
2、调整学习率可以使得网络中途输出nan
------》
结论:梯度爆炸

原理二

https://www.bilibili.com/video/BV1X44y1r77r?spm_id_from=333.999.0.0&vd_source=d49d528422c02c473340ce042b8c8237

1、alexnet相对是比较深的网络:

2、批量归一化中抽取的是“小批量”,带有一定的随机性。一定程度上,这里的小批量会 给网络 带来一定的噪音控制模型复杂度

3、批量归一化后,lr学习率可以设置大的数,具有加速收敛的作用

非常感谢李沐大佬的讲解视频!!!!,本文以一个实际的问题出发,了解大佬讲解的知识点。有自己的独特之处
,如有侵权、雷同、错误之处!!,请君指点!!!!!

alexnet实验偶遇:loss nan, train acc 0.100, test acc 0.100情况,通过bn层加快收敛速度,防止过拟合,防止梯度消失、爆炸相关推荐

  1. loss=nan解决办法

    训练网络时出现loss=nan的情况,caffe不会报错,但是显然这样是不对的. 将solver.prototxt文件中的base_lr减小一点之后,这个问题就不再出现了.我一般先将base_lr降为 ...

  2. 训练中Loss为Nan的原因,梯度消失或者爆炸的优化

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 现象 如何确定是否出现梯度爆炸? 在训练过程中出现梯度爆炸会伴随一些细微的信号,如: (1)模 ...

  3. 【解决方案】pytorch中loss变成了nan | 神经网络输出nan | MSE 梯度爆炸/梯度消失

    loss_func = nn.MSELoss() loss = loss_func(val, target) 最近在跑一个项目,计算loss时用了很普通的MSE,在训练了10到300个batch时,会 ...

  4. 目标检测--RFBNet训练自己制作数据集出现loss=nan问题的解决方法

    之前用RFBNet进行目标检测,采用的数据集是VOC2007和VOC2012.最近用在自己的数据集进行训练,由于我的数据集格式跟VOC格式不一样,根据网上的经验,我就开始将自己的数据集制作成VOC格式 ...

  5. pytorch训练 loss=inf或者训练过程中loss=Nan

    造成 loss=inf的原因之一:data underflow 最近在测试Giou的测试效果,在mobilenetssd上面测试Giou loss相对smoothl1的效果: 改完后训练出现loss= ...

  6. tensorflow object_detection api ERROR:tensorflow:Model diverged with loss = NaN.

    进行迁移学习时,使用model_main.py进行训练,无脑报错#"ERROR:tensorflow:Model diverged with loss = NaN.".后来上git ...

  7. tensorflow loss nan 解决办法

    tensorflow loss: nan 解决办法 数据归一化 from sklearn.preprocessing import MinMaxScaler,MaxAbsScaler,Standard ...

  8. java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0

    java.lang.NumberFormatException: Infinite or NaN原因之浮点类型除数为0 啊啊啊啊啊啊啊啊啊啊,看来用不到的东西你永远不知道在代码中会遇到什么奇葩问题.

  9. 如何解决loss NAN的问题

    如何解决loss NAN的问题 参考文章: (1)如何解决loss NAN的问题 (2)https://www.cnblogs.com/zymei/p/10686408.html (3)https:/ ...

最新文章

  1. 研究生的早期科研之路
  2. Laravel添加验证场景提高针对性质的验证
  3. java 动态按钮_java-向片段动态添加按钮
  4. 机器学习Tensorflow基本操作:线程队列图像
  5. Asp.Net MVC5入门学习系列⑤
  6. 中移4G模块-ML302-OpenCpu开发-服务器搭建
  7. vue+django 生鲜项目 (二)
  8. [zt]OpenCV2.1.0的安装
  9. mysql8.x非注册使用[{绿色使用]
  10. 从零开始设计一款APP之如何做原型图
  11. 各种常用的默认端口号归纳
  12. CSS3(三)Animation 入门详解
  13. 著名的斐波那契额数列,1 1 2 3 5 8输出第n项
  14. 如何获取阿里云免费的SSL证书
  15. 腾讯课堂 H5 直播间点赞动效实现
  16. multi-kernels、ALLOC与USE、Zero-Copy
  17. python json接口数据提取_返回数据中提取数据的方法(JSON数据取其中某一个值的方法)...
  18. 英雄联盟拳头公司个人开发API如何注册获取 - Web-scraping爬虫
  19. ERROR: cannot launch node of type [map_server/map_server]: map_server
  20. 网页前台推荐一款配色软件:Adobe kuler(在线升级,ADOBE官方产品)

热门文章

  1. 炸窝了,苹果禁止使用热更新
  2. 2010通信展圆满落幕
  3. 1-C语言开发环境的搭建
  4. Shell脚本break和continue语句应用
  5. 建筑八大员培训武汉施工员培训工程施工单位人员流失的对策
  6. 电脑一打开wps就黑屏_如何解决电脑打开黑屏只显示鼠标的问题
  7. Security-Onion-Solutions安全洋葱安装方法
  8. 计算机运行游戏慢怎么办,电脑运行速度慢怎么回事 电脑运行速度慢的解决方法...
  9. Unity NGUI实现角色名追随角色移动
  10. 10个丑惯了的互联网设计元素