在上一篇“深度学习 (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_func = torch.nn.L1Loss(reduction='mean')
'''note:
reduction=None 啥也不干
reduction='mean' 返回loss和的平均值
reduction='mean' 返回loss的和。
不指定即默认mean。
'''
'''代码示例'''
loss_func = torch.nn.MSELoss(reduction='mean')
# note: reduction同上。
'''代码示例'''
loss_func = torch.nn.BCELoss(weight=None, reduction='mean')
# note:
# weight为长度为n的tensor,用来指定一个batch中各样本占有的权重,如公式中的wi,不指定默认为各样本权重均为1。
# reduction同上。
# 用的时候需要在该层前面加上 Sigmoid 函数。
'''代码示例'''
loss_func = torch.nn.NLLLoss(weight=None, reduction='mean')
# note:
# weight同上,如公式中的w代表各个类在损失中占有的权重,即类的重要程度,若不赋予权重w,则各类同等重要,上述公式中的w[class]去掉。
# reduction同上。
'''代码示例'''
loss_func = torch.nn.CrossEntropyLoss(weight=None,reduction='mean')
# note:
# weight同nn.NLLLoss。
# reduction同上。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。