Pytorch nn.BCEWithLogitsLoss() 的简单理解与用法
2023-02-18 16:32:55 时间
这个东西,本质上和nn.BCELoss()没有区别,只是在BCELoss上加了个logits函数(也就是sigmoid函数),例子如下:
import torch
import torch.nn as nn
label = torch.Tensor([1, 1, 0])
pred = torch.Tensor([3, 2, 1])
pred_sig = torch.sigmoid(pred)
loss = nn.BCELoss()
print(loss(pred_sig, label))
loss = nn.BCEWithLogitsLoss()
print(loss(pred, label))
loss = nn.BCEWithLogitsLoss()
print(loss(pred_sig, label))
输出结果分别为:
tensor(0.4963)
tensor(0.4963)
tensor(0.5990)
可以看到,nn.BCEWithLogitsLoss()相当于是在nn.BCELoss()中预测结果pred的基础上先做了个sigmoid,然后继续正常算loss。所以这就涉及到一个比较奇葩的bug,如果网络本身在输出结果的时候已经用sigmoid去处理了,算loss的时候用nn.BCEWithLogitsLoss()…那么就会相当于预测结果算了两次sigmoid,可能会出现各种奇奇怪怪的问题——
相关文章
- git 切换远程仓库地址
- git 提示error setting certificate verify locations 解决方案
- Linux 查看占用内存前10的命令
- git分支使用规范
- Helm 搭建K8S环境gitlab-runner
- 生物信息数据分析教程视频——15-clusterProfiler包+ClueGO做富集分析
- IMvigor210CoreBiologies包官方下载链接失效问题
- Kagol:2022年最值得推荐的前端开源文章
- 把时间沉淀到自己的热爱里 | Kagol 的 2022 年终总结
- 使用Git,10件你可能需要“反悔”的事
- 如何将MongoDB数据库的数据迁移到MySQL数据库中
- Linux下服务器环境的搭建和配置之一——Apache篇
- Node使用Mongoose操作MongoDB数据库——增删改查的实现
- 如何使用自对弈强化学习训练一个五子棋机器人Alpha Gobang Zero
- 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?
- GitHub车牌检测识别项目调研
- Linux基础-学会使用命令帮助
- Linux 基础-新手必备命令
- Linux 基础-文件及目录管理
- Linux 基础-文本处理命令