大数据,机器学习,人工智能互联网科技大数据

Pytorch_第六篇_深度学习 (DeepLearning)

2020-08-22  本文已影响0人  沁泽呀

深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数


Introduce

在上一篇“深度学习 (DeepLearning) 基础 [1]---监督学习和无监督学习”中我们介绍了监督学习和无监督学习相关概念。本文主要介绍神经网络常用的损失函数。

以下均为个人学习笔记,若有错误望指出。


神经网络常用的损失函数

pytorch损失函数封装在torch.nn中。

损失函数反映了模型预测输出与真实值的区别,模型训练的过程即让损失函数不断减小,最终得到可以拟合预测训练样本的模型。

note:由于PyTorch神经网络模型训练过程中每次传入一个mini-batch的数据,因此pytorch内置损失函数的计算出来的结果如果没有指定reduction参数,则默认对mini-batch取平均

以下对几个常用的损失函数以及其应用场景做一个简单总结。(以下损失函数的公式均代表单个min-batch的损失,且假设x为神经网络的预测输出,y为样本的真实值,xi为一个mini-batch中第i个样本的预测输出,yi同理,n为一个批量mini-batch的大小

loss(x,y) = {1\over n}\sum|x_i-y_i|

'''代码示例'''
loss_func = torch.nn.L1Loss(reduction='mean')
'''note: 
reduction=None 啥也不干
reduction='mean' 返回loss和的平均值
reduction='mean' 返回loss的和。
不指定即默认mean。
'''

loss(x,y) = {1\over n}\sum(x_i-y_i)^2

'''代码示例'''
loss_func = torch.nn.MSELoss(reduction='mean')
# note: reduction同上。

loss(x,y) = {1\over n}\sum-w_i[y_i*logx_i + (1-y_i)*log(1-x_i)]

'''代码示例'''
loss_func = torch.nn.BCELoss(weight=None, reduction='mean')
# note:
# weight为长度为n的tensor,用来指定一个batch中各样本占有的权重,如公式中的wi,不指定默认为各样本权重均为1。
# reduction同上。

# 用的时候需要在该层前面加上 Sigmoid 函数。

loss(x,class) = {1\over n}\sum -w[j]*x[j]

'''代码示例'''
loss_func = torch.nn.NLLLoss(weight=None,  reduction='mean')
# note:
# weight同上,如公式中的w代表各个类在损失中占有的权重,即类的重要程度,若不赋予权重w,则各类同等重要,上述公式中的w[class]去掉。
# reduction同上。

loss(x,class) = {1 \over n}\sum-w[label_i]log{exp(x_i[label_i])\over \sum_{j=1}^cexp(x[j])} = {1 \over n}\sum w[label_i](-x_i[label_i]+log(\sum_{j=1}^c)exp(x[j]))

'''代码示例'''
loss_func = torch.nn.CrossEntropyLoss(weight=None,reduction='mean')

# note:
# weight同nn.NLLLoss。
# reduction同上。

本文参考-1

本文参考-2

上一篇 下一篇

猜你喜欢

热点阅读