nn.BCELoss与nn.CrossEntropyLoss的区别

以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary CrossEntropyLoss的缩写,BCELoss CrossEntropyLoss的一个特例,只用于二分类问题,而CrossEntropyLoss可以用于二分类,也可以用于多分类。

不过我重新查阅了一下资料,发现同样是处理二分类问题,BCELoss与CrossEntropyLoss是不同的。下面我详细讲一下哪里不同。

1. 使用nn.BCELoss需要在该层前面加上Sigmoid函数。
公式如下:

在这里插入图片描述
2. 使用nn.CrossEntropyLoss会自动加上Sofrmax层。
公式如下:
在这里插入图片描述

实际使用的时候:

对于nn.BCELoss:

import torch.nn.functional as F
loss_fn = torch.nn.BCELoss(reduce=False, size_average=False)
input = torch.randn(3, 4)
target = torch.FloatTensor(3, 4).random_(2)
loss = loss_fn(F.sigmoid(input), target)
print(input); print(target); print(loss)

这里的target可以是:

tensor([[ 0.,  0.,  0.,  1.],
        [ 1.,  0.,  0.,  0.],
        [ 0.,  0.,  0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值