栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pytorch 交叉熵注意事项

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pytorch 交叉熵注意事项

我的pred是[1, 0],label是0,但是最后ce loss不为0,而是0.3133。

pytorch 社区问题
https://discuss.pytorch.org/t/a-bug-of-cross-entropy/158247

明确一下,

  • nn.CrossEntropyLoss期望 logits 作为模型输出
pred = torch.tensor([10000., -10000.])
pred = pred.unsqueeze(0).expand(10, -1)

label = torch.zeros(10).long()


criterion = nn.CrossEntropyLoss()
loss = criterion(pred, label)
print(loss)
# tensor(0.)
  • F.binary_cross_entropy 期望输入sigmoid之后的0-1的向量。但是因为数值精度不是很稳定,amp float16情况下使用不了。

  • F.binary_cross_entropy_with_logits 期望输入logits,但是要注意,logits不能为0,否则loss 会nan。其次amp float16 情况下,需要保持logits是float32,因为logits很容易很大很小(比如我使用了clamp(1e-7, 1-1e-7)),造成数值溢出。可以使用mmcv的@force_fp32(apply_to=(‘logits’, )) 来保证。

在我案例下,@force_fp32(apply_to=(‘logits’, ))可以防止nan,但是训练阶段总还会遇到偶尔的 nan,最后我加了logits.float().clamp(1e-7, 1-1e-7),loss就再也没有nan了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号