Oct 20, 2018 原创文章
Hello Pytorch 贰 -- 常用损失函数
官方文档: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 肆 -- 激活函数 # 深度学习, Pytorch, 激活函数 Nov 02, 2018 原创文章Hello Pytorch 叁 -- 简单理解生成对抗网络(GAN) # 深度学习, Pytorch, 生成对抗网络, GAN Oct 29, 2018 原创文章
Hello Pytorch 壹 -- 卷积层原理及实现 # 深度学习, Pytorch, 卷积层 Oct 20, 2018 原创文章
Hello Pytorch 零 -- 搭建年轻人的第一个神经网络:LeNet # 深度学习, Pytorch, LeNet, CIFAR-10, CNN Oct 19, 2018 原创文章