Problema del gradiente che svanisce
L’altro possibile problema dei gradienti è quando i gradienti svaniscono, cioè tendono a zero. Questo è molto più difficile da risolvere perché non è facile da rilevare. Se la funzione di perdita non migliora a ogni passo, è perché i gradienti sono andati a zero e quindi non hanno aggiornato i pesi? Oppure è perché il modello non riesce a imparare?
Questo problema si verifica più spesso nei modelli RNN quando è richiesta una memoria lunga (frasi molto lunghe).
In questo esercizio osserverai il problema sui dati IMDB, selezionando frasi più lunghe. I dati sono caricati nelle variabili X e y, e sono già importate le classi Sequential, SimpleRNN, Dense e matplotlib.pyplot come plt. Il modello è stato pre-addestrato per 100 epoche; i suoi pesi e la sua history sono salvati nel file model_weights.h5 e nella variabile history.
Questo esercizio fa parte del corso
Reti Neurali Ricorrenti (RNN) per il Language Modeling con Keras
Istruzioni dell'esercizio
- Aggiungi un livello
SimpleRNNal modello. - Carica i pesi pre-addestrati nel modello usando il metodo
.load_weights(). - Aggiungi al grafico l’accuratezza dei dati di training disponibile nell’attributo
'acc'. - Mostra il grafico usando il metodo
.show().
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Create the model
model = Sequential()
model.add(____(units=600, input_shape=(None, 1)))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='sgd', metrics=['accuracy'])
# Load pre-trained weights
model.____('model_weights.h5')
# Plot the accuracy x epoch graph
plt.plot(history.history[____])
plt.plot(history.history['val_acc'])
plt.legend(['train', 'val'], loc='upper left')
plt.____()