keras中的常用Loss使用

How to use?

  • model.compile(optimizer="sgd", loss="mean_squared_error")

  • from keras import losses
    # note: mean_squared_error(y_true : tf.Tensor, y_pred: tf.Tensor) -> tf.Tensor
    model.compile(optimizer="sgd", loss=losses.mean_squared_error)

Available Loss Functions

Regression Loss Function

  • keras.losses.mean_squared_error(y_true, y_pred)

  • keras.losses.mean_absolute_error(y_true, y_pred)

  • keras.losses.mean_absolute_percentage_error(y_true, y_pred)

  • keras.losses.mean_squared_logarithmic_error(y_true, y_pred)

    对于每个回归类的损失函数

    每个样本的标签取值为任意实数

    对每个样本,模型输出也是任意实数

Binary Classification Loss

  • keras.losses.binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)

    每个样本的标签取值范围为{0, 1},也就是每个样本的标签为0或1

    对每个样本,模型输出取值范围为[0,1], 也就是每个样本的模型输出值为[0,1]中的数,也是最后一层的激活函数应该是产生[0,1]的激活函数

    hinge的perfect value 为0

  • keras.losses.hinge(y_true, y_pred)

  • keras.losses.squared_hinge(y_true, y_pred)

    两个hinge型loss中

    每个样本的标签取值范围为{-1, 1},也就是每个样本的标签为-1或1

    对每个样本,模型输出取值范围为[-1,1], 也就是每个样本的模型输出值为[-1,1]中的数,也是最后一层的激活函数应该是产生[-1,1]的激活函数

    hinge的perfect value 为0

Multi-class Classification Loss

  • keras.losses.categorical_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)

    每个样本的标签为一个one-hot向量,如样本1属于第3类,一共有3类,则样本1的标签为[0,0,1]

    对于每个样本,模型的输出值为一个向量,且和为1,表示该样本属于某个类别的概率,如样本1的模型输出值为[0.1, 0.2, 0.7]

  • keras.losses.sparse_categorical_crossentropy(y_true, y_pred, from_logits=False, axis=-1)

    每个样本的标签为一个整数值,如样本1属于第3类,则样本1的标签为3

    对于每个样本,模型的输出值为一个向量,且和为1,表示该样本属于某个类别的概率,如样本1的模型输出值为[0.1, 0.2, 0.7]

  • keras.losses.kullback_leibler_divergence(y_true, y_pred)

    每个样本的标签为一个one-hot向量,如样本1属于第3类,一共有3类,则样本1的标签为[0,0,1]

    对于每个样本,模型的输出值为一个向量,且和为1,表示该样本属于某个类别的概率,如样本1的模型输出值为[0.1, 0.2, 0.7]

from_logits含义

  • binary_crossentropycategorical_crossentropysparse_categorical_crossentropy中,都有from_logits这个参数,一般这样设置:

    • 如果y_pred是经过softmax函数之后的输出,则from_logits=False

    • 如果y_pred是没有经过softmax函数之后的输出,则from_logits=True

    tensorflow中,logit表示未经过归一化的张量,即元素的取值范围为​的张量,参考这个回答

    Summary

    In context of deep learning the logits layer means the layer that feeds in to softmax (or other such normalization). The output of the softmax are the probabilities for the classification task and its input is logits layer. The logits layer typically produces values from -infinity to +infinity and the softmax layer transforms it to values from 0 to 1.

参考

  • how to choose loss functions when training deep learning neural networks/

  • What is the meaning of the word logits in TensorFlow?

你可能感兴趣的:(keras,loss)