Oct 20, 2018 原创文章

  Hello Pytorch 贰 -- 常用损失函数

Pytorch 框架的损失函数模块学习笔记

分享到: 0

请保证您的浏览器支持MathJax插件,以免数学公式无法显示


官方文档:https://pytorch.org/docs/stable/nn.html#loss-functions

损失函数

损失函数(loss function)是一个非负实值函数,用来计算模型的预测值f(x)与真实值Y的差异程度。

L1Loss L1-范数损失函数

计算公式:

其中 N 为batch的大小。如果 reduce 为 True:

MSELoss 均方差损失函数

the Mean Squared Error Loss 均方差损失函数

计算公式:

其中 N 为batch的大小。如果 reduce 为 True:

CrossEntropyLoss 交叉熵损失函数

常用于训练一个具有$C$个分类的分类器。在多分类问题中,我们可以使用softmax函数,将网络的输出值归一化为概率值。

计算公式:

当weight参数被指定的时候,loss的计算公式变为:

其中:class 为分类索引号,索引范围为 0 ~ C。输入值x,各个分类上的得分,大小为$(N, C)$或$(N), C, d_1, d_2, …, d_K)$ 的 Tensor 其中 $K \geq 2$ ,表示训练数据的为K维数据时。$\begin{aligned} \frac{exp(x[class])}{\sum_j exp(x[j]))}\ \end{aligned}$ 表示网络输出在分类class上的概率分布,当其趋近于1时,loss趋向于0;反之当其趋近于0时,loss趋向于无穷大。

如果 size_average 为 true , 则损失函数的计算为batch上所有样本的平均。

交叉熵:

交叉熵用来表示两种分布之间的相似程度,相似度越高,交叉熵越低。对于分布p和q,其定义如下:

在分类问题中,设样本分布为p,分类数为5,则向量 T = [0, 1, 0, 0, 0] 表示该样本属于第二个类,其概率值为1。网络模型的输出分布为q,其在经过softmax函数后,得到一个向量 Y = [0.1, 0.8, 0.05, 0.05, 0] 表示该样本属于第二个类的概率值为0.8。计算两个分布的交叉熵则可以得到:

如果 size_average 为 true,则对所有的样本,我们有以下loss function:

其中$t_{si}$是样本s属于类别i的概率,$y_{si}$是模型对样本s预测为属于类别i的概率。

Examples:


>>> loss = nn.CrossEntropyLoss()
>>> input = torch.randn(3, 5, requires_grad=True)
>>> target = torch.empty(3, dtype=torch.long).random_(5)
>>> output = loss(input, target)
>>> output.backward()


打赏


感谢您的支持,我会继续努力的!

扫码支持

长按识别二维码或打开支付宝扫一扫 完成打赏
或 使用<支付宝链接>打赏


关闭
相关文章:
Hello Pytorch 肆 -- 激活函数 # , , Nov 02, 2018 原创文章
Hello Pytorch 叁 -- 简单理解生成对抗网络(GAN) # , , , Oct 29, 2018 原创文章
Hello Pytorch 壹 -- 卷积层原理及实现 # , , Oct 20, 2018 原创文章
Hello Pytorch 零 -- 搭建年轻人的第一个神经网络:LeNet # , , , , Oct 19, 2018 原创文章

分享到: 0