Ранняя остановка Кераса после указанного количества эпох
Можно ли применить раннюю остановку после указанного количества эпох в Керасе. Например, я хочу обучить свою сетевую сеть 45 эпох, а затем начать использовать EarlyStopping.
Пока что делал так:
early_stop = EarlyStopping(monitor='val_loss', mode='min', verbose=1, baseline = 0.1, patience = 3)
opt = Adam(lr = .00001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics = ['accuracy'])
mod = model.fit_generator(train_batches, steps_per_epoch = 66, validation_data = valid_batches, validation_steps = 22, epochs = 45, verbose = 1)
mod = model.fit_generator(train_batches, steps_per_epoch = 66, validation_data = valid_batches, validation_steps = 22, epochs = 50, callbacks = [early_stop], verbose = 1)
Но делая это таким образом, вы получаете только график с несколькими шагами для обучения.
Есть ли способ написать все это вместе? Любая помощь очень ценится!
1 ответ
Я думаю, что для этого мы можем использовать собственный обратный вызов из библиотеки Keras. Определите свой собственный обратный вызов следующим образом:
# Custom Callback
class myCallback(keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if epoch == 45:
self.model.stop_training = True
callback = myCallback()
opt = Adam(lr = .00001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics = ['accuracy'])
# Include myCallback in callbacks so that the model stops training after 45th epoch
mod = model.fit_generator(train_batches, steps_per_epoch = 66, validation_data = valid_batches, validation_steps = 22, epochs = 50, callbacks = [early_stop, myCallback], verbose = 1)