损失函数(或称目标函数、优化评分函数)是编译模型时所需的两个参数之一:
model.compile(loss='mean_squared_error', optimizer='sgd')
from keras import losses
model.compile(loss=losses.mean_squared_error, optimizer='sgd')
(1)mean_squared_error / mse
均方误差,常用的目标函数,公式为((y_pred-y_true)**2).mean()
def mean_squared_error(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)
(2)mean_absolute_error / mae
绝对值均差,公式为(|y_pred-y_true|).mean()
def mean_absolute_error(y_true, y_pred):
return K.mean(K.abs(y_pred - y_true), axis=-1)
(3) mean_absolute_percentage_error / mape
公式为:(|(y_true - y_pred) / clip((|y_true|),epsilon, infinite)|).mean(axis=-1) * 100,和mae的区别就是,累加的是(预测值与实际值的差)除以(剔除不介于epsilon和infinite之间的实际值),然后求均值。
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)
(4)mean_squared_logarithmic_error / msle
公式为: (log(clip(y_pred, epsilon, infinite)+1)- log(clip(y_true, epsilon,infinite)+1.))^2.mean(axis=-1),这个就是加入了log对数,剔除不介于epsilon和infinite之间的预测值与实际值之后,然后取对数,作差,平方,累加求均值。
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)
(5)squared_hinge
公式为:(max(1-y_truey_pred,0))^2.mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的平方的累加均值。
def squared_hinge(y_true, y_pred):
return K.mean(K.square(K.maximum(1. - y_true * y_pred, 0.)), axis=-1)
(6)hinge
公式为:(max(1-y_true*y_pred,0)).mean(axis=-1),取1减去预测值与实际值乘积的结果与0比相对大的值的的累加均值。
def hinge(y_true, y_pred):
return K.mean(K.maximum(1. - y_true * y_pred, 0.), axis=-1)
(7)binary_crossentropy
常说的逻辑回归, 就是常用的交叉熵函
def binary_crossentropy(y_true, y_pred):
return K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
(8)categorical_crossentropy
多分类的逻辑
def categorical_crossentropy(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred)
评价函数用于评估当前训练模型的性能。当模型编译后(compile),评价函数应该作为 metrics
的参数来输入。
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mae', 'acc'])
from keras import metrics
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=[metrics.mae, metrics.categorical_accuracy])
评价函数和 损失函数 相似,只不过评价函数的结果不会用于训练过程中。
我们可以传递已有的评价函数名称,或者传递一个自定义的 Theano/TensorFlow 函数来使用(查阅自定义评价函数)。
(1)binary_accuracy:
对二分类问题,计算在所有预测值上的平均正确率
(2)categorical_accuracy
对多分类问题,计算再所有预测值上的平均正确率
(3)sparse_categorical_accuracy
与categorical_accuracy相同,在对稀疏的目标值预测时有用
(4)top_k_categorical_accracy
计算top-k正确率,当预测值的前k个值中存在目标类别即认为预测正确
(5)sparse_top_k_categorical_accuracy
与top_k_categorical_accracy作用相同,但适用于稀疏情况