Существует два шага для реализации параметризованной пользовательской функции потерь (cohen_kappa_score
) в Keras.Так как реализована функция для ваших нужд, вам не нужно реализовывать ее самостоятельно.Однако, согласно Документация TensorFlow , sklearn.metrics.cohen_kappa_score
не поддерживает взвешенную матрицу.Поэтому я предлагаю TensorFlow реализацию cohen_kappa.Однако использовать TensorFlow в Keras не так просто ... Согласно этому Вопросу , они использовали control_dependencies
для использования метрики TensorFlow в Keras.Вот пример:
import keras.backend as K
def _cohen_kappa(y_true, y_pred, num_classes, weights=None, metrics_collections=None, updates_collections=None, name=None):
kappa, update_op = tf.contrib.metrics.cohen_kappa(y_true, y_pred, num_classes, weights, metrics_collections, updates_collections, name)
K.get_session().run(tf.local_variables_initializer())
with tf.control_dependencies([update_op]):
kappa = tf.identity(kappa)
return kappa
Поскольку Функции потери Keras принимают (y_true, y_pred)
в качестве параметров, вам нужна функция-обертка, которая возвращает другую функцию.Вот некоторый код:
def cohen_kappa_loss(num_classes, weights=None, metrics_collections=None, updates_collections=None, name=None):
def cohen_kappa(y_true, y_pred):
return -_cohen_kappa(y_true, y_pred, num_classes, weights, metrics_collections, updates_collections, name)
return cohen_kappa
Наконец, вы можете использовать его в Керасе следующим образом:
# get the loss function and set parameters
model_cohen_kappa = cohen_kappa_loss(num_classes=3,weights=weights)
# compile model
model.compile(loss=model_cohen_kappa,
optimizer='adam', metrics=['accuracy'])
Относительно использования метрики Коэна-Каппа в качестве функции потерь.В общем, можно использовать взвешенную каппу в качестве функции потерь.Вот бумага с использованием взвешенной каппы в качестве функции потерь для классификации нескольких классов.