美文网首页
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之损失函数

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