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

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

admin7天前AI技术16

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曲线看。

相关文章

【DL】2023年你应该知道的 10 大深度学习算法

3. 循环神经网络 (RNN) 4. 生成对抗网络 (GAN) 5. 径向基函数网络 (RBFN) 6. 多层感知器 (MLP) 7. 自组织图 (SOM)...

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

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

几种主要的神经网络

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

前端开发实战详解:骡子快跑怎么注册账号 骡子快跑账号注册流程最佳实践|Duuu笔记

骡子快跑注册仅需1分钟,但激活码需从Discord指定频道获取,输错3次将锁账户24小时;积分与注册邮箱强绑定且不可更换;部分地区即使注册成功也无法运行Agent。 ☞☞☞AI 智能聊天, 问答助手...

从入门到精通:前端开发之骡子快跑支持热点借势吗 骡子快跑节日营销文案生成|Duuu笔记

骡子快跑平台提供五步节日营销文案生成路径:一、调用内置32个节日模板库;二、输入热点事件触发动态生成;三、绑定自有素材库实现个性化延展;四、多角色视角协同输出;五、接入微信生态直发并校验合规性。 ☞...

bp神经网络是什么网络,神经网络和bp神经网络

1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。 2、BP神经网络:是一种按照误差逆向传播...

发表评论

访客

看不清,换一张

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