【pytorch】Loss functions 损失函数总结

首先我们来看一下nn和nn.functional有什么区别
nn.functional.xxx是函数接口,而nn.Xxx是nn.functional.xxx的类封装,并且nn.Xxx都继承于一个共同祖先nn.Module。这一点导致nn.Xxx除了具有nn.functional.xxx功能之外,内部附带了nn.Module相关的属性和方法,例如train(), eval(),load_state_dict, state_dict 等。

nn.functional.xxx 就是直接调用
nn.functional.NLLLoss(nn.functional.log_softmax(data),target)
nn.Xxx 就是先定义,之后用的时候再赋值,如

loss = nn.NLLLoss()
conv = nn.Conv2d(16, C, (3, 3))
m = nn.LogSoftmax(dim=1)
#下面再赋值
output = loss(m(conv(data)), target)

参考:https://zhuanlan.zhihu.com/p/61379965

多分类损失函数

多分类任务用到最多的就是nn.NLLLOSS和nn.CrossEntropyLoss。这两者的关系实际上是
nn.CrossEntropyLoss = nn.NLLLOSS + LogSoftmax

nn.NLLLoss

网络的最后一层后有LogSoftmax,就用nn.NLLLoss。也就是我们要先对input用一下log_softmax函数,再作为nn.NLLLoss的输入。
如果不想让网络的最后一层是log_softmax层的话,就可以采用CrossEntropyLoss完全代替此函数。
NLLLoss就是的计算公式可以这样表示
loss(input, class) = -input[class] 也就是把这个类对应的像素的值找出来,再取一个负号
对图像来说,我们现在有C个通道的hxw图像,然后有一个target,那么对某一个像素来说,我们的target的值为几,则我们就选择第几个通道的这个像素位置值的负值。

nn.functional.null_loss

torch.nn.functional.nll_loss(input, target, weight=None, size_average=None, ignore_index=-100, reduce=None, reduction=‘mean’)

  • input 预测值
    一维:(N,C),二维:(N,C,H,W) ,k维: ( N , C , d 1 , d 2 , . . . , d
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值