赞
踩
使用nn.BCEWithLogitsLoss()
- #pred和label都是2d的情况,行数表示有几个样本
- #第1列是预测为标签0的分数,第2列是预测为标签1的分数,第3列是预测为标签2的概率,有3种标签
- # 下面为nn.BCEWithLogitsLoss()的输入概率,和正确标签(float类型)的格式(输入概率和正确标签的shape相同,2d情况)
- pred_1 = torch.tensor([[-0.2,0.6,0.4],
- [0.2,0.1,0.5],
- [0.3,0.8,0.9]])
- label_1 = torch.tensor([[1,0,1], #表示第一个样本既属于标签0也属于标签2
- [1,0,0], #表示第二个样本仅仅属于标签0
- [0,1,1]]) #表示第三个样本既属于标签1也属于标签2
-
- print('nn.BCEWithLogitsLoss())(pred,label) = ',nn.BCEWithLogitsLoss()(pred_1,label_1.float())) #tensor(0.6924)
- print('nn.BCEWithLogitsLoss()(pred,label) = nn.BCELoss()(torch.sigmoid(pred),label)=',nn.BCELoss()(torch.sigmoid(pred_1),label_1.float()))
- print('下面分3个步骤计算')
- print('step 1,使用sigmoid归一化预测概率pred')
- pred_1_sigmoid = torch.sigmoid(pred_1) #;print(pred_1_sigmoid)
- # tensor([[0.4502, 0.6457, 0.5987],
- # [0.5498, 0.5250, 0.6225],
- # [0.5744, 0.6900, 0.7109]])
- print('step 2,分别计算每个样本的损失')
- #计算第一个样本的损失,第一个样本的标签为 (1,0,1)
- sample_1_loss = -1*(1*torch.log(torch.tensor(0.4502)) + 0*torch.log(1-torch.tensor(0.4502)) +
- 0*torch.log(torch.tenso
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。