当前位置: 首页 > news >正文

【调试Bug】网络在训练中输出NaN

首先情况是开始训练正常,网络也在更新,更新后网络就输出了NaN。调试过程:

1. 查看模型权重更新前后的值

        print("更新前权重信息:")print(f"  权重均值: {fc2.weight.mean().item() if not torch.isnan(fc2.weight.mean()) else 'NaN'}")print(f"  最大值: {fc2.weight.max().item() if not torch.isnan(fc2.weight.max()) else 'NaN'}")print(f"  最小值: {fc2.weight.min().item() if not torch.isnan(fc2.weight.min()) else 'NaN'}\n")权重更新print("更新后权重信息:")print(f"  权重均值: {fc2.weight.mean().item() if not torch.isnan(fc2.weight.mean()) else 'NaN'}")print(f"  最大值: {fc2.weight.max().item() if not torch.isnan(fc2.weight.max()) else 'NaN'}")print(f"  最小值: {fc2.weight.min().item() if not torch.isnan(fc2.weight.min()) else 'NaN'}\n")

    判断标准

    • 权重 / 偏置的绝对值如果超过1e4,可能导致输出过大。
    • 若训练中权重突然变得极大,说明可能存在梯度爆炸。

    2. 发现权重更新前正常,更新后NaN

    权重在参数更新后变成了NaN,这说明问题出在反向传播和参数更新环节(梯度计算或优化器步骤导致权重被更新为异常值)。

    原因分析:

    权重从正常数值突然变成NaN,几乎可以确定是梯度爆炸导致的:

    • 反向传播时计算出的梯度为NaN或极端大值(如1e20),优化器用这些异常梯度更新权重,直接导致权重变成NaN
    • 常见触发点:损失函数计算异常(如NaN损失)、输入数据极端值导致中间激活值爆炸、学习率过高放大梯度影响。

    第一步 检查损失函数是否为NaN

    如果损失本身输出是NaN,反向传播的梯度必然是NaN,直接导致权重更新异常。在反向传播前检查损失需要。

    损失为NaN的常见原因:

    • 损失中包含log(0)(如nn.Softmax输出接近 0 时,torch.log(prob)会趋近于-inf

    结果:发现正是损失函数torch.log输出了NaN。

    3 解决

    限制torch.log的值,NaN的问题得到了解决

    http://www.lryc.cn/news/599170.html

    相关文章:

  • 关于网络模型
  • 基于深度学习的图像分类:使用DenseNet实现高效分类
  • Lua(数据库访问)
  • 全新轻量化PHP网盘搜索引擎系统源码
  • SAP在未启用负库存的情况下,库存却出现了负数-补充S4 1709 BUG
  • NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
  • Day31| 56. 合并区间、738.单调递增的数字、968.监控二叉树
  • Chromadb 1.0.15 索引全解析:从原理到实战的向量检索优化指南
  • 规则分配脚本
  • Django集成Swagger全指南:两种实现方案详解
  • k8s的存储之secerts
  • 从零开始:在 PyCharm 中搭建 Django 商城的用户注册与登录功能(轮播图+商品页-小白入门版)
  • Qt 与 SQLite 嵌入式数据库开发
  • mid360连接机载电脑,远程桌面连接不上的情况
  • FunASR实时多人对话语音识别、分析、端点检测
  • 当人机交互迈向新纪元:脑机接口与AR/VR/MR的狂飙之路
  • c++注意点(10)----设计模式(原型)
  • 安装pyarrow包
  • SAP-PP-MRPLIST
  • MyBatis高级应用实战指南
  • Movavi Video Editor v25.9.0 视频编辑软件中文特别版
  • 星图云开发者平台新功能速递 | 页面编辑器:全场景编辑器,提供系统全面的解决方案
  • 纳米编辑器之Nano 编辑器退出**的详细操作指南
  • IAR编辑器如何让左侧的工具栏显示出来?
  • Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)
  • Linux 网络与 Vim 编辑器操作
  • Unity编辑器拓展 IMGUI与部分Utility知识总结(代码+思维导图)
  • 数据仓库深度探索系列 | 开篇:开启数仓建设新征程
  • react中 多个层级 组件数据同用 组件之间传值 usecontext useReducer
  • 滚动提示组件