当前位置:首页 > AI技术 > 正文内容

中PyTorch训练中出现死循环 检查Loss是否异常导致梯无穷|Duuu笔记

admin7天前AI技术22

解决实际问题的Python最佳实践

Loss突变为inf或nan导致训练“假死”:梯度失效、参数不更新,主因是除零、log(0)、重复softmax等;需用torch.isfinite检查、清空optimizer状态或重建,并在AMP中配合GradScaler监控。

Loss突然变成

inf

nan

,训练卡住不动

这是最典型的“假死循环”:模型没真卡死,但

loss

爆掉后,后续梯度全是

nan

optimizer.step()

不再更新参数,看起来像无限循环。常见于除零、log(0)、softmax输入过大、loss函数内部未防错。

立刻在训练循环里加检查:

if torch.isnan(loss) or torch.isinf(loss): print("Loss exploded at step", i); break

torch.autograd.set_detect_anomaly(True)

开启异常检测(只在调试时开,会拖慢训练)

别依赖

loss.item()

判断——它对

nan

返回

nan

,但对

inf

可能静默返回一个极大浮点数;优先用

torch.isfinite(loss).all()

torch.nn.CrossEntropyLoss

输入logits前忘了关softmax

这个错不会报错,但会让loss持续为

inf

或剧烈震荡。因为

CrossEntropyLoss

内部已包含log-softmax,若你手动加了

torch.softmax(logits, dim=-1)

再传入,就等于算两次softmax,数值极易溢出。

正确写法:

criterion = torch.nn.CrossEntropyLoss(); loss = criterion(logits, targets)

logits

是未归一化的原始输出)

错误写法:

probs = torch.softmax(logits, dim=-1); loss = criterion(probs, targets)

→ 直接触发

inf

如果必须用概率输入(比如迁移旧代码),换用

torch.nn.NLLLoss

+

torch.log(probs)

,但要确保

probs

全>0

Adam优化器在loss异常时悄悄失效

Adam维护的

exp_avg

exp_avg_sq

缓存一旦混入

nan

,后续所有梯度更新都会被污染——即使loss后来恢复正常,参数也不再更新,表现就是loss平台期+acc不涨。

独响

一个轻笔记+角色扮演的app

下载

每次

loss

不合法时,必须清空optimizer状态:

optimizer.zero_grad(); optimizer.state.clear()

更稳妥的做法是遇到

nan/inf

后重建optimizer:

optimizer = torch.optim.Adam(model.parameters(), lr=...)

不要只靠

loss.backward()

前加

torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)

——它拦不住loss本身爆炸,只能防梯度爆炸

混合精度训练(

amp

)下

inf

更隐蔽

torch.cuda.amp.autocast

时,某些层(如LayerNorm、Softmax)在FP16下更容易产出

inf

,但错误常延迟几轮才暴露,且

loss.item()

可能仍返回正常值,实际梯度已坏。

Python免费学习笔记(深入)

”;

务必配合

GradScaler

并检查其状态:

if scaler.get_scale() == 0: print("Scaler scale hit zero")

scaler.step(optimizer)

后加

scaler.update()

,否则下次

scale

不会自适应调整

临时关闭

autocast

做验证:把关键计算段用

with torch.no_grad(): with torch.cuda.amp.disable_casts(): ...

包起来,看是否还出

inf

事情说清了就结束。真正难的不是发现

inf

,而是它常藏在某次

backward

之后、

step

之前,而你只盯着loss曲线看。

相关文章

什么是LLM?看这一篇就够了!

一、全套AGI大模型学习路线 AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能! 二、640套AI大模型报告合集 这套包含640份报告的合集,涵盖了AI大...

神经网络分类总结

从网络性能角度可分为连续型与离散型网络、确定性与随机性网络。 从网络结构角度可为前向网络与反馈网络。 从学习方式角度可分为有导师学习网络和无导师学习网络。 按连续突触性...

跨平台机器学习:ML.NET架构及应用编程

平台上的一个机器学习框架,它提供了一套丰富的算法和工具,使得开发人员可以轻松地构建和部署机器学习模型。支持多种编程语言,包括等,这使得它成为跨平台机器学习的理想选择。的架构主要包括三个部分:数据读取、...

前端开发高级应用:MuleRun如何连接Slack通知 MuleRun消息推送集成配置步骤实战案例|Duuu笔记

若MuleRun无法向Slack推送通知,需依次配置Incoming Webhook或Bot Token、在MuleRun中设置对应通知目标参数,并通过最小化任务测试验证;常见失败原因包括凭据错误、权...

几种主要的神经网络

卷积神经网络的输入为二维的像素整阵列,输出为这个图片的属性,当网络训练学习后,所输入的图片或许经过稍微的变换,但卷积神经网络还是可以通过识别图片局部的特征而将整个图片识别出来。 :该层...

AI核心技巧:如何重置openclaw硬件设置 openclaw恢复出厂设置操作方法【操作】深度解析|Duuu笔记

重置 OpenClaw 配置有四种方法:一、交互式向导重置(openclaw onboard --reset);二、指定作用域的命令行重置(如--reset-scope config);三、手动删除~...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。