Как я могу указать функцию потерь, чтобы быть в квадратическом весе каппа в Керасе? - PullRequest
0 голосов
/ 22 февраля 2019

Насколько я понимаю, для кераса требуются функции потерь, чтобы иметь сигнатуру:

def custom_loss(y_true, y_pred):

Я пытаюсь использовать sklearn.metrics.cohen_kappa_score, который принимает (y1, y2, метки = нет, весов = нет, выборочный вес= Нет) `

Если я использую это как:

model.compile(loss=metrics.cohen_kappa_score,
              optimizer='adam', metrics=['accuracy'])

, тогда weights не будет установлен.Я хочу установить это на quadtratic.Есть ли что-то, через что можно пройти?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Существует два шага для реализации параметризованной пользовательской функции потерь (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'])

Относительно использования метрики Коэна-Каппа в качестве функции потерь.В общем, можно использовать взвешенную каппу в качестве функции потерь.Вот бумага с использованием взвешенной каппы в качестве функции потерь для классификации нескольких классов.

0 голосов
/ 25 февраля 2019

Вы можете определить его как пользовательскую потерю, и да, вы правы, что keras принимает только два аргумента в функции потерь.Вот как вы можете определить свою потерю:

def get_cohen_kappa(weights=None):
    def cohen_kappa_score(y_true, y_pred):
        """
        Define your code here. You can now use `weights` directly
        in this function
        """
        return score
    return cohen_kappa_score

Теперь вы можете передать эту функцию вашей модели как:

model.compile(loss=get_cohen_kappa_score(weights=weights),
              optimizer='adam')
model.fit(...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...