八、【TF2】Losses 损失函数

一、损失函数

损失函数是算法流程正向传播的最终传播结果。
让模型有更优的预测结果,就是选择合适的可以缩小预测值与计算值之间的差距,这个差距整体的缩小,是通过损失函数来衡量的。
损失函数,也是反向传播的开始,将计算的结果对正向传播参数进行一系列求导后,借助梯度更新参数,达到参数变化->减少损失值->提升准确率的。

常见的损失函数有:

  • 【分类模型】交叉熵函数
  • 【连续模型】均方差函数

损失函数的输入,一般是两个值,y_true, y_predicted, 即真实值和预测值

二、TF2中的损失函数

每种损失函数,均有类形式和函数形式,使用的时候,均需输入y_true, y_predicted.
调用方法均为:tf.keras.losses.xxx

1、MeanSquaredError 均方误差损失函数

应用:回归
other_class: MSE
method: mean_squared_error
在这里插入图片描述

2、MeanAbsolutePercentageError 平均百分比误差损失函数

应用:回归
other_class: MAPE
method: mean_absolute_percentage_error

3、MeanAbsoluteError 平均绝对值误差损失函数

应用:回归
other_class: MAE
method: mean_absolute_error
在这里插入图片描述

4、Huber huber损失函数

该函数只有类实现形式,用于回归,介于mse与mae之间,对异常值比较鲁棒,相对mse有一定的优势。

5、BinaryCrossentropy 二元交叉熵

应用:二分类
method: binary_crossentropy
在这里插入图片描述

6、CategoricalCrossentropy 类别交叉熵

应用:多分类,要求label为序号编码形式,即y_true为从0开始的int型
这个函数其实是就是连接softmax层的。
method: categorical_crossentropy
在这里插入图片描述

7、SparseCategoricalCrossentropy 稀疏类别交叉熵

应用:多分类,要求label为序号编码形式,用于处理softmax之前的稀疏矩阵
method : sparse_categorical_crossentropy

8、Hinge 合页损失函数

应用:二分类,作为支持向量机SVM的损失函数
method: hinge

9、KLDivergence 相对熵损失函数

别称:KL散度
应用:常用于最大期望算法EM的损失函数,两个概率分布差异的以重信息度量
method: KLD
在这里插入图片描述

10、CosineSimilarity 余弦相似度

应用:多分类
method: cosine_similarity

三、自定义损失函数

自定义损失函数的输入为:y_true, y_pred两个张量, 输出为一个标量作为损失函数值。
自定义损失类继承tf.keras.losses.Loss,重写call方法实现损失的计算逻辑。
自定义损失函数,只需要将损失逻辑写到函数内部即可。

方法实现:

def focal_loss(gamma=2., alpha=0.75):
    
    def focal_loss_fixed(y_true, y_pred):
        bce = tf.losses.binary_crossentropy(y_true, y_pred)
        p_t = (y_true * y_pred) + ((1 - y_true) * (1 - y_pred))
        alpha_factor = y_true * alpha + (1 - y_true) * (1 - alpha)
        modulating_factor = tf.pow(1.0 - p_t, gamma)
        loss = tf.reduce_sum(alpha_factor * modulating_factor * bce,axis = -1 )
        return loss
    return focal_loss_fixed

使用:focal_loss()(y_true, y_pred)

类实现:

class FocalLoss(tf.keras.losses.Loss):
    
    def __init__(self,gamma=2.0,alpha=0.75,name = "focal_loss"):
        self.gamma = gamma
        self.alpha = alpha

    def call(self,y_true,y_pred):
        bce = tf.losses.binary_crossentropy(y_true, y_pred)
        p_t = (y_true * y_pred) + ((1 - y_true) * (1 - y_pred))
        alpha_factor = y_true * self.alpha + (1 - y_true) * (1 - self.alpha)
        modulating_factor = tf.pow(1.0 - p_t, self.gamma)
        loss = tf.reduce_sum(alpha_factor * modulating_factor * bce,axis = -1 )
        return loss
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值