深度学习 —— 损失函数
目录损失函数一、多分类交叉熵函数 —— nn.CrossEntropyLoss()二、二分类交叉熵函数 —— nn.BCELoss()三、回归任务1. MAE 损失函数2. MSE损失函数3. Smooth L1 Loss 也称为 Huber Loss4. 如何选择回归任务的损失函数5. 代码损失函数是什么 评估模型的预测值和真实值差距的函数从而评估模型的好坏损失值越小越好。损失函数、代价函数、目标函数、误差函数同一个意思。一、多分类交叉熵函数 —— nn.CrossEntropyLoss()自带了SoftMax模型的输出输出层不需要再softmax例如带入公式正确类别的预测概率 曲线总结其中y_logits是模型的原始输出/预测分数softmax(y_logits)是模型输出的概率分布也就是每个类别的预测概率最大概率对应预测类别注意多分类交叉熵CrossEntropLoss里面有softmax运算所以模型的输出层不需要softmax。但是如果要获取预测概率则需要在模型输出的原始预测分数后面经过softmax应用多分类问题如10个类别预测图片属于哪一类API:nn.CrossEntropyLoss()代码import torch import torch.nn as nn# 1.创建 样本的真实值假设是一个三分类任务, 真实类别为[1,0,2,0]. 4个样本 y_true torch.tensor([1,0,2,0], dtypetorch.long) # 2.创建 模型的预测分数y_logits y_logits torch.tensor([ [0.1,2.0,1.0], [0.2,0.5,0.3], [0.3,0.2,0.5], [0.5,0.2,0.3] ]) # 3.创建 多分类交叉熵损失函数对象 loss_fn nn.CrossEntropyLoss() # 4.计算损失 # y_logits: 2D(batch_size, 3), y_true: 1D(batch_size) # 为什么是 3 ---- 三分类 loss loss_fn(y_logits,y_true) print(f多分类交叉熵损失函数: {loss})二、二分类交叉熵函数 —— nn.BCELoss()二分类中使用总结二分类交叉熵损失公式BCELoss -y*log(y_hat)-(1-y)*log(1-y_hat)其中y_hat是模型的预测值也就是经过sigmoid之后的预测概率对应正类y 是真实值0或1负类标签编码0one-hot编码[1,0],正类标签编码1one-hot[0,1]注意二分类交叉熵损失BCELoss里面没有sigmoid所以模型输出层最后需要添加sigmoidAPI:nn.BCELoss()代码# 1.创建 样本的真实值假设是一个二分类任务, 真实类别为[0,1,0,1] y_true torch.tensor([0,1,0,1], dtypetorch.float) # 2. 创建 预测分数 1D (batch_size,) y_logits torch.tensor([10, -10, -50, 2.5], dtypetorch.float) # 预测类别 [1,0,0,1] # 经过sigmoid转换为概率这里才是模型输出的预测值 y_preds torch.sigmoid(y_logits) # 3. 创建 二分类交叉熵损失函数 loss_fn nn.BCELoss() # 4. 计算损失 # y_pred: 1D (4,). y_true:1D(4,) loss loss_fn(y_preds,y_true) print(f二分类交叉熵损失: {loss})二分类任务可以用 多分类交叉熵损失。三、回归任务1. MAE 损失函数公式特点① 损失 - 误差呈线性关系② MAE损失函数本身不具有稀梳性不会让权重衰减为0③ 最大问题是梯度在零点不平滑会跳过极小值④ 适用于回归问题中存在异常值或噪声数据时可以减少对离群点的敏感性2. MSE损失函数Mean Squared Loss / Quadratic Loss (MSE loss) 也被称为L2 loss或欧氏距离。计算误差平方的平均值. 均差平方之和 / 样本总数公式特点① 损失-误差呈二次曲线关系② 处处可导、梯度平滑是最常用的回归损失函数③ 误差大时候容易梯度过大 无法有效训练模型④ 适用于大多数标准回归问题如房价、温度预测等3. Smooth L1 Loss 也称为 Huber Loss简单来说就是MAE 和 MSE的结合尤其是在面对异常值时它能平滑过渡避免大误差的影响公式可以转换看做 1是 MSE. ≥ 1 是MAE解决L1MAE在0点不平滑、以及L2MSE的梯度爆炸问题4. 如何选择回归任务的损失函数MSE Smooth L1 MAEAPI:nn.L1Loss()nn.MSELoss()nn.SoothL1Loss()5. 代码# 1.创建 样本的真实值 # 4个样本 y_true torch.tensor([20.0,21.0,22.0,23.0],dtypetorch.float32) # 2.创建 模型的预测值 y_pred torch.tensor([21.0,22.0,23.0,24.0],dtypetorch.float32,requires_gradTrue) # 3.定义损失函数对象 loss_fn1 nn.L1Loss() loss_fn2 nn.MSELoss() loss_fn3 nn.SmoothL1Loss() # 4.计算损失值 loss1 loss_fn1(y_pred,y_true) loss2 loss_fn2(y_pred,y_true) loss3 loss_fn3(y_pred,y_true) # 5.打印损失值 print(f损失值 MAE{loss1}) # 1 print(f损失值 MSE{loss2}) # 2 print(f损失值 Smooth{loss3}) # 3
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2542104.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!