Керас перестает учиться в одной точке - PullRequest
3 голосов
/ 27 марта 2019

Существует около 300 реальных изображений каждого класса. Категориальная модель с 3 классами. Я сделал модель, используя 2000 сгенерированных образцов и 10 эпох. Модель была в порядке, но имела много ложных отрицательных прогнозов. Чем я хотел улучшить модель и увеличил количество сгенерированных образцов (реальное число изображений не изменилось) до 20000. В 6-й эпохе точность начала падать и достигла, наконец, 0,2

339/666 [==============>...............] - ETA: 52s - loss: 0.2762 - acc: 0.9012
340/666 [==============>...............] - ETA: 52s - loss: 0.2757 - acc: 0.9014
341/666 [==============>...............] - ETA: 52s - loss: 0.2754 - acc: 0.9015
342/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.9014   
343/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.8995
344/666 [==============>...............] - ETA: 52s - loss: nan - acc: 0.8976
345/666 [==============>...............] - ETA: 51s - loss: nan - acc: 0.8955

Это было переоснащение? Можно ли как-то предотвратить это в реальном времени, не возобновляя обучение? Например. возможно ли сохранить модель после каждой эпохи и в этом случае выбрать лучшую модель. Или, по крайней мере, может ли Керас нарушить учение?

Ответы [ 2 ]

2 голосов
/ 27 марта 2019

Ваша модель, конечно, здесь не подходит. После определенного количества итераций ваша модель перестает учиться (кривая точности становится более плоской).

Чтобы преодолеть это, вы можете сделать следующее

  • добавить больше данных
  • настройка гиперпараметров

Библиотека keras предоставляет возможность контрольных точек с помощью API обратного вызова. Класс обратного вызова ModelCheckpoint позволяет вам определять, где указывать вес модели, как должен называться файл и при каких обстоятельствах создавать контрольную точку модели.

Используя это, вы можете выбрать лучшую модель из числа итераций.

from keras.callbacks import ModelCheckpoint

"""
    Your Code
"""
checkpoint = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')

См. Как проверить модели глубокого обучения в Керасе

1 голос
/ 27 марта 2019

У меня были похожие проблемы, и то, что ваша потеря внезапно становится nan, немного подозрительно.

Он может перестать учиться из-за того, что ваша целевая функция не обновляется, то есть не число.

Я бы предложил:

  • обзор функции потери модели
  • обзор процесса индивидуализации
  • гарантирует, что входы не могут вызвать nan

Последний пункт может быть наиболее актуальным, так как очень большие числа могут вызвать проблемы при расчете потерь или nan проникновение в ваш вектор признаков.

Использование callback для проверки процесса, например ModelCheckpoint или т.п., может помочь при отладке.

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