Используйте sklearn для создания собственной метрики в керасе - PullRequest
0 голосов
/ 21 ноября 2018

Фон

Я создаю простую модель с использованием керас (с бэкэндом тензорного потока)

model = Sequential()
...
model.compile(loss='mse', optimizer=Adam(), metrics=[average_precision])

, а затем хочу основать ранний останов на своей пользовательской метрике:

model.fit(x=x_train, y=y_train,
      ...
      callbacks=[EarlyStopping(monitor='average_precision', mode='max', patience=3)])

пока все хорошо.Но проблема в том, что average_precision реализован с использованием average_precision_score из sklearn.metrics:

def average_precision(y_true, y_pred):
    return average_precision_score(y_true, y_pred, average="micro")

. Он принимает только массивы numpy.Но во время обучения функция снабжается тензорами.

Вопрос

Как использовать функцию sklearn для реализации пользовательской метрики.

Примечание:

Мне не нужно реализовывать потери, поэтому функция не должна быть дифференцируемой.

Что не работает

Я попытался провести жонглирование с некоторыми сеансами / прогонами / вычислениями, чтобы получить пустые массивы в функции, но мне это не удалось.

Временное решение, которое яЯ использую, но я не доволен:

Я написал свой обратный вызов для ранней остановки.Я предоставляю ему данные проверки в форме массивов в его конструкторе.У этого решения есть несколько недостатков, и я ищу более элегантный.

Чего я не хочу делать:

Переписывание вручную хорошо протестированных функций из sklearn с использованием keras backend.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...