Pytorch损失函数BCELoss,BCEWithLogitsLoss

1. BCELoss

该类主要用来创建衡量目标和输出之间的二进制交叉熵的标准。
用法如下:
torch.nn.BCELoss(weight=None, size_average=None, reduce=None, reduction='mean')

参数:

  • weight,表示对loss中每个元素的加权权值;
  • reduction, 指定输出的格式,包括'none','mean','sum';
  • 其它两个参数一般不推荐使用;

形状:

  • input,(N, *);
  • target,(N, *);
  • output,标量,当reduction为'none'时,为(N, *)。

计算

当reduction参数为'none',即对计算结果不进行处理时,loss可以表示为,

其中,
这里N为batch size。如果reduction参数不为'none'时,
这里需要注意的是target的值必须为0或1。

例子

假设输入为3 x 3的tensor,我们首先随机生成一个tensor
Pytorch损失函数BCELoss,BCEWithLogitsLoss_第1张图片

然后将tensor转换到(0, 1)区间,
Pytorch损失函数BCELoss,BCEWithLogitsLoss_第2张图片
设置target为,
Pytorch损失函数BCELoss,BCEWithLogitsLoss_第3张图片
计算得到,

2. BCEWithLogitsLoss

这个loss类将sigmoid操作和与BCELoss集合到了一个类。
用法如下:
torch.nn.BCEWithLogitsLoss(weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)

参数:

  • weight (Tensor),针对每个loss元素的加权权值;
  • reduction (string), 指定输出的格式,包括'none','mean','sum';
  • pos_weight (Tensor),正样例的权重,必须为长度为类别数量的向量,主要可用来处理类别不均衡情形。
  • 其它两个参数一般不推荐使用;

形状:

  • input,(N, *);
  • target,(N, *);
  • output,标量,当reduction为'none'时,为(N, *)。

计算

计算过程与BCELoss类似,除了增加一个sigmoid层,

例子

我们采用未变换前的input tensor,
Pytorch损失函数BCELoss,BCEWithLogitsLoss_第4张图片

target tensor保持不变,
Pytorch损失函数BCELoss,BCEWithLogitsLoss_第5张图片
最后计算得到,
可见计算结果与上面一致。

3. binary_cross_entropy_with_logits

该函数主要度量目标和输出之间的二进制交叉熵。与第2节的类功能基本相同。
用法如下:
torch.nn.functional.binary_cross_entropy_with_logits(input, target, weight=None, size_average=None, reduce=None, reduction='mean', pos_weight=None)
其参数与BCEWithLogitsLoss基本相同。

例子

可以通过简单的计算来验证,input tensor和target tensor与第3节相同,计算得到,

计算结果与第三节一致。

你可能感兴趣的:(Pytorch损失函数BCELoss,BCEWithLogitsLoss)