当前位置: 首页 > news >正文

常用损失函数-交叉熵损失函数、MAE、MSE、smoothL1

目录标题

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

相关文章:

  • 手机网站技巧/百度投诉中心24人工
  • 相亲网站界面设计/seo搜索引擎优化方法
  • 做win精简系统的网站/营销策划推广公司
  • 龙岩做网站开发要多久/网站安全检测在线
  • 湖南省住房与城乡建设厅网站官网/电脑培训网上课程
  • 展厅设计素材网站/最近新闻头条
  • ZYNQ FPGA嵌入式开发 - 小梅哥(二)
  • 自动生成webhook组件证书
  • JS中Math.random()方法的使用总结
  • 《Linux性能优化实战》学习笔记 Day03
  • 如何寻找sqli的思路(SQL注入,时间盲注,盲注字典)
  • 高校数据可视化(智慧校园)
  • [leetcode.29]两数相除,位运算虽好,不要满眼是她
  • 请问想考软考,零基础的话,哪个证书最好考呢
  • 【手写 Vue2.x 源码】第二十九篇 - diff算法-节点比对
  • java后端-servlet超详细入门
  • mysql性能优化二
  • Python学习中的六个技巧小结