当前位置:   article > 正文

关于nn.BCEWithLogitsLoss()与nn.CrossEntropyLoss()的手动计算过程(都可用于多分类,不仅仅用于二分类)

nn.bcewithlogitsloss()

 使用nn.BCEWithLogitsLoss()

  1. #pred和label都是2d的情况,行数表示有几个样本
  2. #第1列是预测为标签0的分数,第2列是预测为标签1的分数,第3列是预测为标签2的概率,有3种标签
  3. # 下面为nn.BCEWithLogitsLoss()的输入概率,和正确标签(float类型)的格式(输入概率和正确标签的shape相同,2d情况)
  4. pred_1 = torch.tensor([[-0.2,0.6,0.4],
  5. [0.2,0.1,0.5],
  6. [0.3,0.8,0.9]])
  7. label_1 = torch.tensor([[1,0,1], #表示第一个样本既属于标签0也属于标签2
  8. [1,0,0], #表示第二个样本仅仅属于标签0
  9. [0,1,1]]) #表示第三个样本既属于标签1也属于标签2
  10. print('nn.BCEWithLogitsLoss())(pred,label) = ',nn.BCEWithLogitsLoss()(pred_1,label_1.float())) #tensor(0.6924)
  11. print('nn.BCEWithLogitsLoss()(pred,label) = nn.BCELoss()(torch.sigmoid(pred),label)=',nn.BCELoss()(torch.sigmoid(pred_1),label_1.float()))
  12. print('下面分3个步骤计算')
  13. print('step 1,使用sigmoid归一化预测概率pred')
  14. pred_1_sigmoid = torch.sigmoid(pred_1) #;print(pred_1_sigmoid)
  15. # tensor([[0.4502, 0.6457, 0.5987],
  16. # [0.5498, 0.5250, 0.6225],
  17. # [0.5744, 0.6900, 0.7109]])
  18. print('step 2,分别计算每个样本的损失')
  19. #计算第一个样本的损失,第一个样本的标签为 (1,0,1)
  20. sample_1_loss = -1*(1*torch.log(torch.tensor(0.4502)) + 0*torch.log(1-torch.tensor(0.4502)) +
  21. 0*torch.log(torch.tenso
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/708944
推荐阅读
  

闽ICP备14008679号