SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解

https://blog.csdn.net/qq_22210253/article/details/85222093
这个老哥写的是真的好

要理解BCEWithLogitsLoss就要理解BCELoss
我的理解: BCEWithLogitsLoss = nn.Sigmoid() + nn.BCELoss()
BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步

1. nn.BCELoss()

1 在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵。
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解
2 先用Sigmoid给这些值都搞到0~1之间:
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解

sigmoid函数科普,把(-1, 1)的输入变为(0, 1)
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解

3 假设Target是:
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解

4 计算过程如下:
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解

我转载的博主说:应该是我上面每次都保留4位小数,算到最后误差越来越大差了0.0001。不过也很厉害啦哈哈哈哈哈!

2. BCEWithLogitsLoss

BCEWithLogitsLoss就是把Sigmoid-BCELoss合成一步。
我们直接用刚刚的input验证一下是不是0.7193:
SCRN中的损失函数torch.nn.BCEWithLogitsLoss详解