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

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

admin2个月前 (04-09)AI技术65

解决实际问题的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曲线看。

相关文章

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

一、Submarine(Hadoop生态系统) (一)Submarine 介绍 (三)Submarine 属于 Hadoop 生态系统 (四)Submarine 官网版...

神经网络分类总结

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

神经网络中的单层神经网络

神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术。人脑中的神经网络是一个非常复杂的组织。成人的大脑中估计有1000亿个神经元之多。 看一个经典的神经网络。这是一个包...

一文讲清神经网络、BP神经网络、深度学习的关系

人工神经网络中的顶级代表。往往说《神经网络》就是指《BP神经网络》。 大家研究着各种神经网络,研究得不亦乐乎, 来了两个家伙Romelhart 和Mcclelland,...

深入理解优化:如何利用 Gemini 3.1 的阶梯计费策略?企业级大规模调用实务完全指南|Duuu笔记

需深入理解Gemini 3.1阶梯计费与调用联动关系,通过识别阶梯区间、请求级Token预估截断、多模型路由调度、响应缓存去重、项目拆分配额绑定五种路径优化成本。 ☞☞☞AI 智能聊天, 问答助手,...

前端开发实战详解:骡子快跑如何生成会议纪要 骡子快跑语音转文字整理技巧最佳实践|Duuu笔记

使用听脑AI转写、骡子快跑生成纪要、影子跟读校验、自定义术语词典及EcomGPT-CNN情绪风险分析,五步实现会议纪要高效精准产出。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量...

发表评论

访客

看不清,换一张

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