网站建设的开题报告,百度网站链接提交入口,设计网站公司都选亿企邦,网站页面在线设计一、概念
损失函数在深度学习领域是用来计算搭建模型预测的输出值和真实值之间的误差。 具体实现过程#xff1a;在一个批次#xff08;batch#xff09;前向传播完成后#xff0c;得到预测值#xff0c;然后损失函数计算出预测值和真实值之间的差值#xff0c;反向传播…一、概念
损失函数在深度学习领域是用来计算搭建模型预测的输出值和真实值之间的误差。 具体实现过程在一个批次batch前向传播完成后得到预测值然后损失函数计算出预测值和真实值之间的差值反向传播去更新权值和偏置等参数以降低差值不断向真实值接近最终得到效果良好的模型。 常见的损失函数包括MSE均方差, 也可以叫L2LossCross Entropy Loss交叉熵L1 LossL1平均绝对值误差Smooth L1 Loss(平滑的L1 loss)BCELoss (Binary Cross Entropy)等。下面分别对这些损失函数举例说明。 只写了一部分后面陆续增加。。
二、Pytorch举例
2.1 MSELoss
MSELoss 就是计算真实值和预测值的均方差也可以叫L2 Loss。 特点MSE收敛速度比较快能提供最大似然估计是回归问题、模式识别、图像处理中最常使用的损失函数。
import torch
from torch import nn
from torch.nn import MSELossinputs torch.tensor([1, 2, 3], dtypetorch.float32)
outputs torch.tensor([2, 2, 4], dtypetorch.float32)# MSE
# size_average为True,表示计算批前向传播后损失函数的平均值如果为False则计算损失函数的和。
# 同样reduce为True返回标量reduce为False, size_average参数失效直接返回向量形式的loss
# reduction目的为减少tensor中元素的数量。为none,表示不减少为sum表示求和为mean表示求平均值loss_mse nn.MSELoss()
result_mse loss_mse(inputs, outputs)
print(result_mse)loss_mse1 nn.MSELoss(reductionsum)
result_mse1 loss_mse1(inputs, outputs)
print(result_mse1)loss_mse2 nn.MSELoss(size_averageFalse, reduceFalse, reductionsum)
result_mse2 loss_mse2(inputs, outputs)
print(result_mse2)输出
tensor(0.6667)
tensor(2.)
tensor([1., 0., 1.])2.2 L1Loss
L1Loss是计算预测值和真实值的平均绝对误差。 特点对异常点的鲁棒性更强但在残差为零处不可导收敛速度比较慢。
loss_l1 L1Loss()
result_l1 loss_l1(inputs, outputs)
print(result_l1)tensor(0.6667)2.3 SmoothL1loss
SmoothL1loss是L1Loss 和MSE的混合最早在Fast R-CNN中提出。 特点收敛速度稳定模型更容易收敛到局部最优防止梯度爆炸。
# beta默认为1表示指定要在L1和L2损失之间更改的阈值。
loss_smol1 SmoothL1Loss()
result_smol1 loss_smol1(inputs, outputs)
print(result_smol1)tensor(0.3333)2.4 CrossEntropyLoss
CrossEntropyLoss表示概率分布之间的距离当交叉熵越小说明二者之间越接近对于高维输入比较有用。一般都需要激活函数将输入转变为01之间。 经典公式 其实这个表示BCELoss二分类交叉熵。
pytorch的公式表示的是多分类问题 1当目标targets 包括类索引ignore_index才可以设置. 2表示每个类别的概率当每个小批项目需要超过单个类别的标签时非常有用例如混合标签、标签平滑等。 其中: x为输入值y为目标值C代表类别数量w为权值参数。
# weight 为每个类指定的手动重缩放权重。
# ignore_indexignore_index表示指定忽略目标值但不影响输入梯度。
# label_smoothing 在[0.0,1.0]之间的浮点型。指定计算损失时的平滑量其中 0.0 表示不平滑。 如重新思考计算机视觉的初始架构中所述目标成为原始基本事实和均匀分布的混合。
# 交叉熵损失
x torch.tensor([0.5, 0.2, 0.3])
x torch.reshape(x, (1, 3))
print(x)
y torch.tensor([1])loss_cross CrossEntropyLoss()
result_cross loss_cross(x, y)
print(result_cross)tensor([[0.5000, 0.2000, 0.3000]])
tensor(1.2398)三、参考文章
目标检测回归损失函数简介SmoothL1/IoU/GIoU/DIoU/CIoU Loss 损失函数八