Keras之自定义损失(loss)函数用法说明
程序员文章站
2022-03-03 21:27:55
在keras中可以自定义损失函数,在自定义损失函数的过程中需要注意的一点是,损失函数的参数形式,这一点在keras中是固定的,须如下形式:def my_loss(y_true, y_pred):# y...
在keras中可以自定义损失函数,在自定义损失函数的过程中需要注意的一点是,损失函数的参数形式,这一点在keras中是固定的,须如下形式:
def my_loss(y_true, y_pred): # y_true: true labels. tensorflow/theano tensor # y_pred: predictions. tensorflow/theano tensor of the same shape as y_true . . . return scalar #返回一个标量值
然后在model.compile中指定即可,如:
model.compile(loss=my_loss, optimizer='sgd')
具体参考keras官方metrics的定义keras/metrics.py:
"""built-in metrics. """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import six from . import backend as k from .losses import mean_squared_error from .losses import mean_absolute_error from .losses import mean_absolute_percentage_error from .losses import mean_squared_logarithmic_error from .losses import hinge from .losses import logcosh from .losses import squared_hinge from .losses import categorical_crossentropy from .losses import sparse_categorical_crossentropy from .losses import binary_crossentropy from .losses import kullback_leibler_divergence from .losses import poisson from .losses import cosine_proximity from .utils.generic_utils import deserialize_keras_object from .utils.generic_utils import serialize_keras_object def binary_accuracy(y_true, y_pred): return k.mean(k.equal(y_true, k.round(y_pred)), axis=-1) def categorical_accuracy(y_true, y_pred): return k.cast(k.equal(k.argmax(y_true, axis=-1), k.argmax(y_pred, axis=-1)), k.floatx()) def sparse_categorical_accuracy(y_true, y_pred): # reshape in case it's in shape (num_samples, 1) instead of (num_samples,) if k.ndim(y_true) == k.ndim(y_pred): y_true = k.squeeze(y_true, -1) # convert dense predictions to labels y_pred_labels = k.argmax(y_pred, axis=-1) y_pred_labels = k.cast(y_pred_labels, k.floatx()) return k.cast(k.equal(y_true, y_pred_labels), k.floatx()) def top_k_categorical_accuracy(y_true, y_pred, k=5): return k.mean(k.in_top_k(y_pred, k.argmax(y_true, axis=-1), k), axis=-1) def sparse_top_k_categorical_accuracy(y_true, y_pred, k=5): # if the shape of y_true is (num_samples, 1), flatten to (num_samples,) return k.mean(k.in_top_k(y_pred, k.cast(k.flatten(y_true), 'int32'), k), axis=-1) # aliases mse = mse = mean_squared_error mae = mae = mean_absolute_error mape = mape = mean_absolute_percentage_error msle = msle = mean_squared_logarithmic_error cosine = cosine_proximity def serialize(metric): return serialize_keras_object(metric) def deserialize(config, custom_objects=none): return deserialize_keras_object(config, module_objects=globals(), custom_objects=custom_objects, printable_module_name='metric function') def get(identifier): if isinstance(identifier, dict): config = {'class_name': str(identifier), 'config': {}} return deserialize(config) elif isinstance(identifier, six.string_types): return deserialize(str(identifier)) elif callable(identifier): return identifier else: raise valueerror('could not interpret ' 'metric function identifier:', identifier)
以上这篇keras之自定义损失(loss)函数用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。