Keras LSTM - Почему моя функция раннего останова не работает? - PullRequest
0 голосов
/ 20 апреля 2020

Я новичок в области глубокого обучения и Keras, и пытаюсь сделать мою классификацию моделей более точной. Поскольку данных всего 75, поэтому я разделил 60 для обучения и 15 для проверки (80/20), так что это легко переоснастить. Я пытался добавить больше слоев, больше единиц, уменьшая слои, единицы, увеличивая и уменьшая скорость обучения, и т. Д. c для лучшей производительности.

Из предыдущих прогонов я знаю, что моя val_a cc уменьшается до 0,8 примерно за 100-150 эпох, поэтому я хочу прекратить тренировки в это время, чтобы избежать снижения.

Before using earlystopping

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

Я попытался установить монитор 'val_a cc', по крайней мере, базовое значение достигнет 0,8, и затем добавьте min_delta = 0,01, ожидая, что это правило будет применяться только после достижения базовой линии, однако это не помогло. После добавления функции раннего останова, почему она останавливается так рано, не достигнув базовой линии? И каждый раз, когда я менял терпение, тренировки останавливались на «ЭТОМ» терпении.

after adding earlystopping Вот мой код.

#early stopping
from Keras.callbacks import EarlyStopping
early_stopping= keras.callbacks.EarlyStopping(monitor='val_acc', min_delta=0.01, patience=5, verbose=0, mode='max', baseline=0.8, restore_best_weights=False)

train_history =model.fit(X_train, train_Label,batch_size=5,
                         epochs=300,verbose=2,callbacks=[early_stopping],
                         validation_split=0.2)

Почему он останавливается так рано, не достигнув базовой линии? Есть причина для этого? Как мне настроить функцию, чтобы она соответствовала моим ожиданиям? Или есть какие-либо полезные методы, которые можно применять для получения максимальной точности проверки?

Спасибо!

1 Ответ

0 голосов
/ 20 апреля 2020

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

См. здесь для простого объяснения.

Удалите базовую линию, и ваша модель остановится, когда требуется. Также в вашем фрагменте кода есть delta = 0, просто к сведению.

...