目录标题
- 常见的损失函数
 - 1、分类任务
 - 1.1 多分类任务
 - 1.2 二分类任务
 
- 2、 回归任务
 - 2.1 MAE损失
 - 2.2 MSE损失
 - 2.3 smooth L1损失
 
- 总结
 
常见的损失函数
损失函数:衡量模型参数的质量的函数,衡量方式是比较网络输出和真实输出的差异。ybar与y 之间的差异
 损失函数、代价函数、目标函数、误差函数 虽然叫法不同,但都是一样的。
1、分类任务
在分类任务中最多使用的是交叉熵损失函数,下面分多分类和二分类来讨论交叉熵
1.1 多分类任务
在多分类任务中,使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失
 
 交叉熵损失:最小化正确类别所对应的预测概率的对数的负值
在tf.keras 中使用CategoricalCrossentropy
 代码实现:
#交叉熵损失
import tensorflow as tf
#设置真实值和预测值
y_true = [[0,1,0],[0,0,1]]
y_pre1 = [[0.05,0.9,0.05],[0.3,0.2,0.5]]
y_pre2 = [[0.05,0.9,0.05],[0.05,0.05,0.9]]
#实例化交叉熵损失
cce = tf.keras.losses.CategoricalCrossentropy()
#计算损失结果
cce(y_true,y_pre1)  #输出结果为0.39925
cce(y_true,y_pre2)  #输出结果为0.10536
 

 越接近真实值,交叉熵损失值越小
1.2 二分类任务
二分类任务中,不再使用softmax激活函数,而是使用sigmoid激活函数,所以损失函数也相应调整
 
 在tf.keras 中使用BinaryCrossentropy()
import tensorflow as tf
#设置真实值和预测值
y_true = [[0],[1]]
y_pre1 = [[0.4],[0.6]]
y_pre2 = [[0.1],[0.9]]
#实例化交叉熵损失
bce = tf.keras.losses.BinaryCrossentropy()
#计算损失结果
bce(y_true,y_pre1)  #输出结果为0.5108254
bce(y_true,y_pre2)  #输出结果为0.10536041
 
同样地,越接近真实值,交叉熵损失值越小
2、 回归任务
2.1 MAE损失
MAE损失也称为L1 Loss ,是以绝对误差作为距离
 特点:L1 Loss 具有稀疏性,为了惩罚较大的值,常常将其作为正则项添加到其他loss中作为约束,最大问题是梯度在零点不平滑,导致会跳过极小值

在tf.keras 中使用MeanAbsoluteError()
import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre1 = [[1.],[0.]]
y_pre2 =  [[0.],[1.]]
#实例化MAE损失
mae = tf.keras.losses.MeanAbsoluteError()
#计算损失结果
mae(y_true,y_pre1)  #输出结果为1.0
mae(y_true,y_pre2)  #输出结果为0
 
2.2 MSE损失
MSE损失又称为L2 loss ,欧式距离,以误差的平方和作为距离
 L2 loss 也称为正则项,当预测值和目标值相差很大时,梯度容易爆炸
 
 在tf.keras 中使用MeanSquaredError()
import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre1 = [[1.],[0.]]
y_pre2 =  [[0.],[1.]]
#实例化MAE损失
mae = tf.keras.losses.MeanSquaredError()
#计算损失结果
mae(y_true,y_pre1)  #输出结果为1.0
mae(y_true,y_pre2)  #输出结果为0
 
越接近真实值,损失函数越小
L2损失用在正则化
2.3 smooth L1损失
将L!和L2损失结合起来,smooth L1损失是最常用的损失函数
 下面公式中,x指真实值与预测值之间的差值
 
 实际上是一个分段函数,[-1,1]区间之间是L2损失,解决了L1的不光滑问题,在[-1,1]区间之外是L1损失,解决了离群点梯度爆炸的问题
在tf.keras 中使用Huber()
import tensorflow as tf
#设置真实值和预测值
y_true = [[0.],[1.]]
y_pre = [[0.2],[0.6]]
#实例化MAE损失
mae = tf.keras.losses.Huber()
#计算损失结果
mae(y_true,y_pre)  #输出结果为0.0499
 
深度学习一般用于分类任务
总结
多分类问题用多分类的交叉熵函数
 二分类问题用二分类的交叉熵函数
 回归问题用smooth L1损失












![【SpringBoot高级篇】SpringBoot集成RocketMQ消息队列]](https://img-blog.csdnimg.cn/fea2a79aafb5459880a838e38d727ac9.png)






