L'arresto anticipato è fondamentalmente l'interruzione dell'allenamento una volta che la perdita inizia ad aumentare (o in altre parole l'accuratezza della convalida inizia a diminuire). Secondo i documenti è usato come segue;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
I valori dipendono dalla tua implementazione (problema, dimensione del batch ecc ...) ma generalmente per evitare l'overfitting userei;
- Monitorare la perdita di convalida (è necessario utilizzare la convalida incrociata o almeno set di addestramento / test) impostando l'
monitor
argomento su 'val_loss'
.
min_delta
è una soglia per quantificare o meno una perdita in un'epoca come miglioramento. Se la differenza di perdita è inferiore min_delta
, viene quantificata come nessun miglioramento. Meglio lasciarlo a 0 poiché siamo interessati a quando la perdita peggiora.
patience
l'argomento rappresenta il numero di epoche prima di fermarsi una volta che la perdita inizia ad aumentare (smette di migliorare). Questo dipende dalla tua implementazione, se usi lotti molto piccoli
o un grande tasso di apprendimento la tua perdita a zig-zag (la precisione sarà più rumorosa), quindi è meglio impostare un patience
argomento ampio . Se utilizzi lotti di grandi dimensioni e una bassa velocità di apprendimento, la perdita sarà più agevole, quindi puoi utilizzare un patience
argomento più piccolo . In ogni caso, lo lascerò come 2 in modo da dare più possibilità al modello.
verbose
decide cosa stampare, lasciarlo al valore predefinito (0).
mode
l'argomento dipende dalla direzione che ha la quantità monitorata (dovrebbe diminuire o aumentare), poiché monitoriamo la perdita, possiamo usarla min
. Ma lasciamo che sia Keras a gestirlo per noi e lo impostiauto
Quindi userei qualcosa di simile e sperimenterei tracciando la perdita di errore con e senza arresto anticipato.
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
Per possibili ambiguità su come funzionano i callback, cercherò di spiegare di più. Una volta richiamato fit(... callbacks=[es])
il modello, Keras chiama funzioni predeterminate di oggetti callback dati. Queste funzioni possono essere chiamati on_train_begin
, on_train_end
, on_epoch_begin
, on_epoch_end
e on_batch_begin
, on_batch_end
. La richiamata anticipata viene richiamata alla fine di ogni epoca, confronta il miglior valore monitorato con quello attuale e si ferma se le condizioni sono soddisfatte (quante epoche sono trascorse dall'osservazione del miglior valore monitorato ed è più di un argomento di pazienza, la differenza tra l'ultimo valore è maggiore di min_delta ecc ..).
Come indicato da @BrentFaust nei commenti, l'addestramento del modello continuerà fino a quando non vengono soddisfatte le condizioni di arresto anticipato o il epochs
parametro (predefinito = 10) in fit()
. L'impostazione di un callback di arresto anticipato non farà sì che il modello si alleni oltre il suo epochs
parametro. Quindi chiamare una fit()
funzione con un epochs
valore maggiore trarrebbe maggiori benefici dal callback di arresto anticipato.
min_delta
è una soglia per quantificare o meno la variazione del valore monitorato come miglioramento. Quindi sì, se diamomonitor = 'val_loss'
, si riferirebbe alla differenza tra l'attuale perdita di convalida e la precedente perdita di convalida. In pratica, se si dàmin_delta=0.1
una diminuzione della perdita di convalida (corrente - precedente) inferiore a 0,1 non si quantifica, quindi si interromperà l'allenamento (se si hapatience = 0
).