您好,欢迎来到刀刀网。
搜索
您的当前位置:首页二元交叉熵损失/BCELoss/BCEWithLogitsLoss的pytorch实现

二元交叉熵损失/BCELoss/BCEWithLogitsLoss的pytorch实现

来源:刀刀网

 

什么是 BCELoss?

BCELoss,即二元交叉熵损失,是用于二分类问题的损失函数。它的基本思想是计算预测概率分布与真实标签之间的交叉熵。交叉熵越小,表示模型的预测越接近真实标签。

 

数学表达式

对于单个样本,BCELoss 的数学表达式如下:

BCELoss 在 PyTorch 中的实现

在 PyTorch 中,提供了 BCELoss(二元交叉熵损失)的接口,BCELoss 的实现非常简单。示例代码如下:

导入torch

import torch

 生成2个4*4大小的Tensor,用变量a,b接收,生成一个4*4的target,用变量c接收

a=torch.rand(4,4,requires_grad=True)
b=torch.randn(4,4,requires_grad=True)
c=torch.randint(0,2,(4,4)).float()

 a返回结果如下,每个元素的 范围是0到1

tensor([[0.7576, 0.2793, 0.4031, 0.7347],
        [0.0293, 0.7999, 0.3971, 0.7544],
        [0.5695, 0.4388, 0.6387, 0.5247],
        [0.6826, 0.3051, 0.4635, 0.4550]], requires_grad=True)

b返回结果如下,每个元素的 范围是 -∞到+∞

tensor([[-0.6970, -1.1608,  0.6995,  0.1991],
        [ 0.8657,  0.2444, -0.6629,  0.8073],
        [ 1.1017, -0.1759, -2.2456, -1.4465],
        [ 0.0612, -0.6177, -0.7981, -0.1316]], requires_grad=True)

c返回结果如下,每个元素为0或1

tensor([[1., 1., 1., 1.],
        [1., 0., 0., 0.],
        [1., 1., 1., 1.],
        [1., 1., 0., 1.]])

计算a,c的Loss,可直接调用 torch.nn.BCELoss()

torch.nn.BCELoss()(a,c)

结果如下

tensor(0.9549, grad_fn=<BinaryCrossEntropyBackward0>)

计算b,c之间的Loss,由于b的每一个元素在正负无穷之间:

1 可直接调用torch.nn.BCEWithLogitsLoss()

2 先用Sigmoid函数将数值转化为0到1之间,再用torch.nn.BCELoss()

torch.nn.BCEWithLogitsLoss()(b,c)
torch.nn.BCELoss()(torch.sigmoid(b),c)

返回结果:

tensor(0.88, grad_fn=<BinaryCrossEntropyWithLogitsBackward0>)
tensor(0.88, grad_fn=<BinaryCrossEntropyBackward0>)

如直接使用:

torch.nn.BCELoss()(b,c)

会产生报错:

RuntimeError: all elements of input should be between 0 and 1

 

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务