【tensorflow2.0】损失函数losses
一般来说,监督学习的目标函数由损失函数和正则化项组成。(Objective = Loss + Regularization) 对于keras模型,目标函数中的正则化项一般在各层中指定,例如使用Dense的 kernel_regularizer 和 bias_regularizer等参数指定权重使用l1或者l2正则化项,此外还可以用kernel_constraint 和 bias_constraint等参数约束权重的取值范围,这也是一种正则化手段。 损失函数在模型编译时候指定。对于回归模型,通常使用的损失函数是平方损失函数 mean_squared_error。 对于二分类模型,通常使用的是二元交叉熵损失函数 binary_crossentropy。 对于多分类模型,如果label是类别序号编码的,则使用类别交叉熵损失函数 categorical_crossentropy。如果label进行了one-hot编码,则需要使用稀疏类别交叉熵损失函数 sparse_categorical_crossentropy。 如果有需要,也可以自定义损失函数,自定义损失函数需要接收两个张量y_true,y_pred作为输入参数,并输出一个标量作为损失函数值。 import numpy as np pandas as pd tensorflow as tf from tensorflow.keras import layers,models,losses,regularizers,constraints 一,损失函数和正则化项tf.keras.backend.clear_session() model = models.Sequential() model.add(layers.Dense(64,input_dim=64,kernel_regularizer=regularizers.l2(0.01),activity_regularizer=regularizers.l1(0.010))) model.add(layers.Dense(10"sigmoid")) model.compile(optimizer = rmspropsparse_categorical_crossentropy",metrics = [AUC]) model.summary()
二,内置损失函数内置的损失函数一般有类的实现和函数的实现两种形式。 如:CategoricalCrossentropy 和 categorical_crossentropy 都是类别交叉熵损失函数,前者是类的实现形式,后者是函数的实现形式。 常用的一些内置损失函数说明如下。
三,自定义损失函数自定义损失函数接收两个张量y_true,y_pred作为输入参数,并输出一个标量作为损失函数值。 也可以对tf.keras.losses.Loss进行子类化,重写call方法实现损失的计算逻辑,从而得到损失函数的类的实现。 下面是一个Focal Loss的自定义实现示范。Focal Loss是一种对binary_crossentropy的改进损失函数形式。 在类别不平衡和存在难以训练样本的情形下相对于二元交叉熵能够取得更好的效果。 详见《如何评价Kaiming的Focal Loss for Dense Object Detection?》 https://www.zhihu.com/question/63581984 def focal_loss(gamma=2.,alpha=0.25): def focal_loss_fixed(y_true,y_pred): pt_1 = tf.where(tf.equal(y_true,1 tf.where(tf.equal(y_true,0),tf.zeros_like(y_pred)) loss = -tf.sum(alpha * tf.pow(1. - pt_1,gamma) * tf.log(1e-07+pt_1)) -tf.sum((1-alpha) * tf.pow( pt_0,gamma) * tf.log(1. - pt_0 + 1e-07)) return loss focal_loss_fixed class FocalLoss(losses.Loss): def __init__(self,gamma=2.0,1)">): self.gamma = gamma self.alpha = alpha call(self,y_true,y_pred): pt_1 = tf.where(tf.equal(y_true,tf.zeros_like(y_pred)) loss = -tf.sum(self.alpha * tf.pow(1. - pt_1,self.gamma) * tf.log(1e-07+pt_1)) -tf.sum((1-self.alpha) * tf.pow( pt_0,self.gamma) * tf.log(1. - pt_0 + 1e-07return loss ? 参考: 开源电子书地址:https://lyhue1991.github.io/eat_tensorflow2_in_30_days/ GitHub 项目地址:https://github.com/lyhue1991/eat_tensorflow2_in_30_days (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ORACLE 11G R2 RAC+Mutilpath+RAW+ASM+Silent+AddNode+DG 完
- Ajax异步后台加载Html绑定不上事件
- Tour de Flex中经典例子(一)-------LinkBar与Viewstack实现
- C:如何传递文件作为参数?
- 正则表达式的高级规则
- c# – 当密钥列具有不同名称时的实体拆分
- Swift UISearchController连接在Core Data Project中,app运
- cocos2d-x 帧动画的三种实现
- swift – 如何测试staticTexts包含使用XCTest的字符串
- 关于《FantasyWarrior3D》开源项目编译问题的补充说明