美文网首页
tf.keras之损失函数

tf.keras之损失函数

作者: 612twilight | 来源:发表于2020-03-18 17:13 被阅读0次

tf.keras里面有许多内置的损失函数可以使用,由于种类众多,以几个常用的为例:

BinaryCrossentropy

BinaryCrossentropy是用来进行二元分类交叉熵损失函数的,共有如下几个参数

  • from_logits=False, 指出进行交叉熵计算时,输入的y_pred是否是logits,logits就是没有经过sigmoid激活函数的fully connect的输出,如果在fully connect层之后经过了激活函数sigmoid的处理,那这个参数就可以设置为False

  • label_smoothing=0, 是否要进行标签平滑,这里是防止过拟合的一个技巧

  • reduction=losses_utils.ReductionV2.AUTO,对于多标签分类的情况,正常计算完之后,loss会batch_size维的向量,这个参数是进行最后的求平均,如果是设置为losses_utils.ReductionV2.None,就不会求平均了

  • name='binary_crossentropy'。

如果输入的from_logits是true,那么首先就要经过激活函数的处理。那对于一个[batch_size,num_class]的logits,进行sigmoid激活就是对将tensor中的每个元素x转为sigmoid(x).构成矩阵P,P_{ij}代表的就是样本i属于标签j概率,即:
p_{ij}=\frac{1}{1+e^{-x_{ij}}}
然后在这个基础上计算二分类的交叉熵,这里的二分类交叉熵是tensor中的每个元素都独立的,所以会有[batch_size,num_class]个loss,以下y表示真实的标签
loss_{ij}=-(1-y_{ij})*log(1-p_{ij})-y_{ij}*log(p_{ij})
然后在axis=-1维度做了reduce_mean操作,变成了[batch_size]维度的loss,最后再经过reduction里面指定的处理方法,再对batch求一次平均值。另外,这个方法如果在from_logits=True的情况下,可以用tf.nn.sigmoid_cross_entropy_with_logits来代替,阅读源码,在tf.keras里面就是调的这个函数,sigmoid_cross_entropy_with_logits返回的是[batch_size]个loss,最后我们再接一个reduce_mean就可以变成标量了。

CategoricalCrossentropy

CategoricalCrossentropy是用来处理多分类的,同样有以上这几个参数。但是激活函数不一样,使用的是softmax激活函数,softmax的过程如下
p_{ij}=\frac {e^{x_{ij}}}{\sum_{j=0}^{J}e^{x_{ij}}}
经过激活函数之后,每一行的元素代表了这个样本属于各类别的概率,并且概率和为1,即[batch_size,num_class]里面的每一行的和为1,然后进行交叉熵计算,这里和binary_cross_entropy不同,这里中间计算出来的loss的shape只有[batch_size]了。多分类是二分类的扩展,二分类可以看成两个互斥的标签,而多分类则是多个互斥的标签
loss_{i}:=-\sum_{j=0}^{J}(y_{ij}log(p_{ij}))

SparseCategoricalCrossentropy

SparseCategoricalCrossentropy损失函数同CategoricalCrossentropy类似,只是输入不一样,该损失函数的输入的y_true是[batch_size]个标签,每个元素是label对应的index,没有经过one-hot编码,这个方法如果在from_logits=True的情况下,和tf.nn.sparse_sigmoid_cross_entropy_with_logits再接一个reduce_mean是类似的效果。

MeanSquaredError

MeanSquaredError损失函数(均方差)一般用来解决回归问题,参数只有两个,默认即可。

  • reduction=losses_utils.ReductionV2.AUTO,

  • name='mean_squared_error'

均方差就是y_pred语y_true对应元素的差的平方,然后求和在求平均

不同问题的最后一层激活函数与损失函数

问题类型 最后一层激活函数 损失函数
二分类 sigmoid binary_crossentropy
多类别、单标签 softmax categorical_crossentropy
多类别、多标签 sigmoid binary_crossentropy
回归到任务任意 mse
回归到0~1之间的值 sigmoid mse或者binary_crossentropy

相关文章

  • tf.keras之损失函数

    tf.keras里面有许多内置的损失函数可以使用,由于种类众多,以几个常用的为例: BinaryCrossentr...

  • Center Loss

    损失函数改进之Center Loss

  • 机器学习:常见的损失函数

    损失函数简要介绍 0-1损失 绝对值损失 log对数损失函数 平方损失函数 指数损失函数 Hinge损失函数 损失...

  • tf.keras之回调函数

    tf.keras的model在进行fit时可以传入各种回调函数,介绍几种常用的回调函数。 EarlyStoppin...

  • (4)损失函数

    损失函数用来表示输出与实际值的差距。常用的损失函数为0-1损失函数、平方损失函数、绝对损失函数、对数损失函数、交叉...

  • 【深度学习】

    1, 两个重要的函数:得分函数和损失函数损失函数: hinge损失,softmax 损失。hinge损失: max...

  • 损失函数概述

    常用的损失函数 1.L1损失(绝对损失函数) 和 L2 损失(平方损失函数) L1范数损失函数,也被称为 最小绝对...

  • 各机器学习模型的目标函数

    目标函数和损失函数的区别 损失函数:模型拟合的越好,损失应该越小; 目标函数:优化的目标,可以是“损失函数”或者“...

  • 损失函数 - 交叉熵损失函数

    参考[1]损失函数 - 交叉熵损失函数

  • 机器学习随笔

    1 模型的函数表达式,如逻辑回归函数 2 定义损失函数,最小二乘损失,0/1损失,交叉熵。 3 目标函数,损失函数...

网友评论

      本文标题:tf.keras之损失函数

      本文链接:https://www.haomeiwen.com/subject/clscyhtx.html