深度学习7-常用损失函数和自定义损失函数

本文介绍了深度学习中常用的损失函数,包括交叉熵损失函数,并详细探讨了自定义损失函数,如mse和Focal Loss。特别地,通过一个实践案例展示了如何在TensorFlow中使用Focal Loss实现自定义损失函数,应用于minist数据集的图像分类任务。
摘要由CSDN通过智能技术生成


在这里插入图片描述

1.常用损失函数

tf.keras.losses

列举常用的,如下:
在这里插入图片描述

BinaryCrossentropy和binary_crossentropy有什么区别?
前者是类的实现形式,后者是函数的实现形式
这两者并没有本质的区别

使用损失函数时,首先要确定到底是分类还是回归问题?一定要对应
每个损失函数是如何实现的一定要清楚

交叉熵损失函数-多分类
在这里插入图片描述

# tf版本
import tensorflow as tf

# 调用类,输入损失函数
cce = tf.keras.losses.CategoricalCrossentropy()

loss = cce(
    [[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]],
    [[.9,.05,.05],[.05,.89,.06],[.05,.01,.94]])
print('Loss:',loss.numpy())     # Loss: 0.09458993


# Numpy版本
import numpy as np 

a = np.array([[1.,0.,0.],[0.,1.,0.],[0.,0.,1.]])
b = np.array([[.9,.05,.05],[.05,.89,.06],[.05,.01,.94]])

np.average(-np.sum(a * np.log(b),axis=1))     # 0.09458991187728844

2.自定义损失函数

mse

在这里插入图片描述

Focal loss损失函数

在这里插入图片描述

多分类的Focal loss函数:
gamma 用来减小易分类样本的权重,使得模型训练时更加专注于难分类的样本
α 用来计算每个类别的概率-权重-二分类变成多分类时,α会失效
# 类的实现
class SparseFocalLoss(tf.keras.losses.Loss):
    
    def __init__(self,gamma=2.0,alpha=0.25,class_num=10):
    	# 初始化参数
        self.gamma = gamma
        self.alpha = alpha
        self.class_num = class_num
        super(SparseFocalLoss,self).__init__()
        
        
    def call(self,y_true,y_pred):
        # 激活函数
        y_pred = tf.nn.softmax(y_pred,axis=-1)
        # 使预测值在某个区间不为0
        epsilon = tf.keras.backend.epsilon()
        y_pred = tf.clip_by_value(y_pred,epsilon,1.0)
        
        # 转换成one_hot格式
        y_true = tf.one_hot(y_true,depth=self.class_num)
        # 数据类型转化
        y_true = tf.cast(y_true,tf.float32)
        
        loss = -y_true * tf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值