keras中的损失函数

Posted somTian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras中的损失函数相关的知识,希望对你有一定的参考价值。

只是为了记录下如何选择损失函数,把公式贴上来了,有些损失函数的公式没找到,以后找到了再贴上来。

损失函数是模型优化的目标,所以又叫目标函数、优化评分函数,在keras中,模型编译的参数loss指定了损失函数的类别,有两种指定方法:

model.compile(loss='mean_squared_error', optimizer='sgd')

或者

from keras import losses
model.compile(loss=losses.mean_squared_error, optimizer='sgd')

你可以传递一个现有的损失函数名,或者一个TensorFlow/Theano符号函数。 该符号函数为每个数据点返回一个标量,有以下两个参数:

  • y_true: 真实标签. TensorFlow/Theano张量
  • y_pred: 预测值. TensorFlow/Theano张量,其shape与y_true相同

实际的优化目标是所有数据点的输出数组的平均值。

mean_squared_error

mean_squared_error(y_true, y_pred)

源码:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

说明:

MSE:

L=1ni=1n(y(i)predy(i)true)2 L = 1 n ∑ i = 1 n ( y p r e d ( i ) − y t r u e ( i ) ) 2

mean_absolute_error

mean_absolute_error(y_true, y_pred)

源码:

def mean_absolute_error(y_true, y_pred):
    return K.mean(K.abs(y_pred - y_true), axis=-1)

说明:

MAE:

L=1ni=1n|(y(i)predy(i)true)| L = 1 n ∑ i = 1 n | ( y p r e d ( i ) − y t r u e ( i ) ) |

mean_absolute_percentage_error

mean_absolute_percentage_error(y_true, y_pred)

源码:

def mean_absolute_percentage_error(y_true, y_pred):
    diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true),
                                            K.epsilon(),
                                            None))
    return 100. * K.mean(diff, axis=-1)

说明:

MAPE:

L=1ni=1n|y(i)predy(i)truey(i)true|100 L = 1 n ∑ i = 1 n | y p r e d ( i ) − y t r u e ( i ) y t r u e ( i ) | ⋅ 100

mean_squared_logarithmic_error

mean_squared_logarithmic_error(y_true, y_pred)

源码:

def mean_squared_logarithmic_error(y_true, y_pred):
    first_log = K.log(K.clip(y_pred, K.epsilon(), None) + 1.)
    second_log = K.log(K.clip(y_true, K.epsilon(), None) + 1.)
    return K.mean(K.square(first_log - second_log), axis=-1)

说明:

MSLE:

L=1ni=1n(log(y(i)true+1)log(y(i)pred+1))2 L = 1 n ∑ i = 1 n ( l o g ( y t r u e ( i ) + 1 ) − l o g ( y p r e d ( i ) + 1 ) ) 2

squared_hinge

squared_hinge(y_true, y_pred)

源码:

def squared_hinge(y_true, y_pred):
    return K.mean(K.square(K.maximum(1. - y_true * y_pred, 0.)), axis=-1)

L=1ni=1n(max(0,1y(i)predy(i)true))2 L = 1 n ∑ i = 1 n ( m a x ( 0 , 1 − y p r e d ( i ) ⋅ y t r u e ( i ) ) ) 2

hinge

hinge(y_true, y_pred)

源码:

def hinge(y_true, y_pred):
    return K.mean(K.maximum(1. - y_true * y_pred, 0.), axis=-1)

说明:

L=1ni=1nmax(0,1y(i)predy(i)trukeras损失函数详解

keras 中的输入形状(此损失期望目标具有与输出相同的形状)

如何在 keras 中创建自定义损失函数? (自定义加权二元交叉熵)

Keras深度学习框架之损失函数

神经网络中的各种损失函数介绍

Keras 中的自定义损失函数(IoU 损失函数)和梯度误差?