Ранняя остановка с перекрестной проверкой метрики в Керасе - PullRequest
0 голосов
/ 13 октября 2018

Есть ли в Керасе способ перекрестной проверки отслеживаемой метрики раннего останова EarlyStopping(monitor = 'val_acc', patience = 5)?Перед разрешением обучения перейти к следующей эпохе, может ли модель пройти перекрестную проверку, чтобы получить более надежную оценку ошибки теста?Я обнаружил, что метрика раннего останова, скажем, точность набора проверки, может страдать от высокой дисперсии.Модели с ранней остановкой часто не так хорошо работают с невидимыми данными, и я подозреваю, что это связано с высокой дисперсией, связанной с подходом набора валидации.

Чтобы минимизировать дисперсию в метрике ранней остановки, я быкак k-кратная перекрестная проверка метрики раннего останова, когда модель обучается с эпохи i до эпохи i + 1.Я хотел бы взять модель в эпоху i, разделить тренировочные данные на 10 частей, изучить на 9 частях, оценить ошибку на оставшейся части, повторить, чтобы все 10 частей имели шанс быть набором для проверки,и затем приступайте к обучению в эпоху i + 1 с полными данными тренировки, как обычно.Надеемся, что среднее из 10 оценок ошибок будет более надежной метрикой, которую можно использовать для ранней остановки.

Я пытался написать пользовательскую функцию метрики, включающую перекрестную проверку в k-кратном порядке, но не могузаставить его работать.Есть ли способ перекрестной проверки отслеживаемой метрики раннего останова, возможно, с помощью пользовательской функции внутри модели Keras или цикла вне модели Keras?

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я полагаю, что использование обратного вызова, предложенного @VincentPakson, было бы чище и эффективнее, но требуемый уровень программирования выше моего.Я смог создать цикл for, чтобы делать то, что я хотел:

  1. Обучение модели для одной эпохи и сохранение ее с использованием model.save().

  2. Загрузка сохраненной модели и обучение модели для одной эпохи для каждой из 10 крат (т.е. 10 моделей), затем усреднение 10 ошибок набора проверки.

  3. Загрузкасохраненная модель и обучение для одной эпохи с использованием всех данных обучения, а также перезапись сохраненной модели этой моделью.

  4. Повторение шагов 1-3 до тех пор, пока оценка из 2 не прекратит улучшаться дляданное терпение.

Я бы хотел получить лучший ответ, но, похоже, это сработает.Медленно.

0 голосов
/ 15 октября 2018

Keras действительно имеет очень настраиваемую функцию обратного вызова, как можно увидеть здесь .

Если вас не устраивает текущая функция EarlyStopping кераты, которая для меня выполняет проверку потери проверки во время обучения, вы можете создать собственную функцию обратного вызова.Также могут быть связаны пользовательские функции обратного вызова.

Если ваша проблема связана с моделью внутри обратного вызова, тогда self - это переменная, к которой вы хотите получить доступ, как видно из этого ответа .Я не совсем понимаю, почему вы хотите «перестроить» модель на этапе тестирования.НО тогда с этим вы все еще можете использовать обратные вызовы, после обратного вызова EarlyStopping вы можете создать другую функцию обратного вызова, которая могла бы «перестроить» модель.

Если вы хотите получить доступ к более глубоким переменным моделей, которые вы можете использовать, Keras backend .

Надеюсь, я помог.

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