常用损失函数-交叉熵损失函数、MAE、MSE、smoothL1
创始人
2024-05-13 18:29:32
0

目录标题

    • 常见的损失函数
      • 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损失

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...