pytorch 交叉熵损失函数 BCELoss

BCE Loss

交叉熵损失函数计算公式:

BCE Loss = - 1/n*(y_actual * log(y_pred) + (1 - y_actual) * log(1 - y_pred))

ti为标签值:0或者1

oi是经过sigmoid后的概率值

BCEWithLogitsLoss

这个损失将Sigmoid层和BCELoss合并在一个类中。

BCEWithLogitsLoss`(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)

python 复制代码
import torch
from torch import autograd
input = autograd.Variable(torch.tensor([[ 1.9072,  1.1079,  1.4906],
        [-0.6584, -0.0512,  0.7608],
        [-0.0614,  0.6583,  0.1095]]), requires_grad=True)
print(input)
print('-'*100)

from torch import nn
m = nn.Sigmoid()
print(m(input))
print('-'*100)

target = torch.FloatTensor([[0, 1, 1], [1, 1, 1], [0, 0, 0]])
print(target)
print('-'*100)

import math

r11 = 0 * math.log(0.8707) + (1-0) * math.log((1 - 0.8707))
r12 = 1 * math.log(0.7517) + (1-1) * math.log((1 - 0.7517))
r13 = 1 * math.log(0.8162) + (1-1) * math.log((1 - 0.8162))

r21 = 1 * math.log(0.3411) + (1-1) * math.log((1 - 0.3411))
r22 = 1 * math.log(0.4872) + (1-1) * math.log((1 - 0.4872))
r23 = 1 * math.log(0.6815) + (1-1) * math.log((1 - 0.6815))

r31 = 0 * math.log(0.4847) + (1-0) * math.log((1 - 0.4847))
r32 = 0 * math.log(0.6589) + (1-0) * math.log((1 - 0.6589))
r33 = 0 * math.log(0.5273) + (1-0) * math.log((1 - 0.5273))

r1 = -(r11 + r12 + r13) / 3
#0.8447112733378236
r2 = -(r21 + r22 + r23) / 3
#0.7260397266631787
r3 = -(r31 + r32 + r33) / 3
#0.8292933181294807
bceloss = (r1 + r2 + r3) / 3 
print(bceloss)
print('-'*100)

loss = nn.BCELoss()
print(loss(m(input), target))
print('-'*100)

loss = nn.BCEWithLogitsLoss()
print(loss(input, target))

结果

原始的3x3矩阵:

tensor(\[ 1.9072, 1.1079, 1.4906,

-0.6584, -0.0512, 0.7608,

-0.0614, 0.6583, 0.1095], requires_grad=True)


使用Sigmoid矩阵进行计算:

tensor(\[0.8707, 0.7517, 0.8162,

0.3411, 0.4872, 0.6815,

0.4847, 0.6589, 0.5273], grad_fn=<SigmoidBackward0>)


二分类标签:

tensor(\[0., 1., 1.,

1., 1., 1.,

0., 0., 0.])


手动计算的结果:

0.8000147727101611


使用BCE Loss对sigmoid后的计算的结果:

tensor(0.8000, grad_fn=<BinaryCrossEntropyBackward0>)


使用BCEWithLogitsLoss直接对原始数据计算的结果:

tensor(0.8000, grad_fn=<BinaryCrossEntropyWithLogitsBackward0>)

相关推荐
武子康9 小时前
调查研究-151 Slack vs Jira:区别、使用指南与团队选择方法
人工智能·科技·深度学习·ai·职场和发展·jira·slack
z小猫不吃鱼12 小时前
05 Transformer Encoder 详解:BERT 为什么使用 Encoder?
深度学习·bert·transformer
钓了猫的鱼儿14 小时前
基于深度学习+AI的卷心菜目标检测与预警系统(Python源码+数据集+UI可视化界面+YOLOv11训练结果)
人工智能·深度学习·目标检测
汽车仪器仪表相关领域14 小时前
南华 NHA-604/605 汽车排放气体测试仪:国六b全适配高精度便携检测设备
大数据·人工智能·功能测试·深度学习·安全·fpga开发·压力测试
CV实验室15 小时前
Remote Sensing 29个SITS基准数据集综述:多模态遥感分类的新起点
人工智能·深度学习·计算机视觉·音视频
手写码匠17 小时前
华为云Flexus+DeepSeek征文|基于华为云Flexus X实例 + Dify + DeepSeek 构建企业级智能知识库问答系统实战
人工智能·深度学习·算法·aigc
lqqjuly17 小时前
语音识别:隐马尔可夫模型、深度学习与序列转导
人工智能·深度学习·语音识别
动物园猫17 小时前
铁路障碍物目标检测数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·yolo·目标检测
万粉变现经纪人18 小时前
2026最新CSDN博客质量分v6.0深度解读:从评分机制到80+实战提分指南
数据库·人工智能·深度学习·csdn·csdn博客·csdn博客质量分6.0·博客质量分