Pytorch学习笔记(深度之眼)(7)之损失函数

21 篇文章 2 订阅
17 篇文章 1 订阅

1.损失函数概念

在这里插入图片描述现在了解一下Pytorch中的Loss:

class _loss(Module):
    def __init__(self, size_average=None, reduce=None, reduction='mean'):
        super(_loss,self).__init__()
        if size_average is not None or reduce is not None:
            self.reduction = _Reduction.legacy_get_string(size_average, reduce)
        else:
            self.reduction = reduction

Pytorch中的Loss还是继承于Module,所以Loss相当于一个网络层。init()初始化函数中有三个参数,其中size_average和reduce即将被舍弃,其功能在reduction中已经被实现。

nn.CrossEntropyLoss

在这里插入图片描述在这里插入图片描述公式中的P是真实的概率分布,也就是训练集中样本的分布,Q是模型输出的分布,所以在机器学习模型优化交叉熵等价于优化相对熵,因为交叉熵公式中的信息熵 H ( P ) H§ H§是训练集的信息,因为训练集是固定的,所以 H ( P ) H§ H§是一个常数,所以交叉熵在优化的时候是优化相对熵。

熟悉了信息熵、相对熵、交叉熵的信息后,现在正式了解Pytorch中的nn.CrossEntropyLoss。交叉熵的计算公式如下:
在这里插入图片描述公式中的x是一个概率值,class是一个类别值,括号中执行的是softmax操作,softmax的作用是将概率值归一化到和为1的概率值。

对比交叉熵的公式定义,公式中有一个 P ( x i ) ,这个在展开公式中值为1,因为样本是固定的,所以 P ( x i )是定值。因为只计算一个样本,所以没有公式定义中的求和。

现在看一下nn.CrossEntropyLoss()的主要参数,第一个参数weight,其功能为各个类别的loss设置权值,加了权值的交叉熵计算公式为:

在这里插入图片描述比如说第零类,为了让模型更关注第零类,可以将其weight设置为1.2倍,这是weight的作用;

第二个参数是ignore_index,用于指定某一类别不用计算损失,例如一千类的分类任务中,忽略第999类的损失,可以设置ignore_index=999。

第三个参数为reduction,用于指定计算模型,有三种计算模型,分别为none/sum/mean,none是逐个元素计算损失,sum是所有元素的损失求和,返回标量,mean是对所元素的损失进行加权平均,返回标量。在mean模型中,如果不设置参数weight的时候,就是单纯的期望平均。

nn.NLLLoss

在这里插入图片描述

nn.BCELoss

在这里插入图片描述

nn.BCEWithLogitsLoss

在这里插入图片描述nn.BCAWithLogitsLoss中参数pos_weight的作用是均衡正负样本,其作用是正样本的loss乘于pos_weight系数,比如正样本有100个,负样本有300个,正负样本的比例为 1: 3 ​,所以pos_weight可以设置为3,也就是正样本的loss乘于3,这样就等价于正样本为300个,负样本为300个,实现正负样本的均衡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值