Problemet med försvinnande gradienter
Det andra möjliga gradientproblemet uppstår när gradienterna försvinner, det vill säga går mot noll. Det här är ett betydligt svårare problem att lösa, eftersom det inte är lika lätt att upptäcka. Om förlustfunktionen inte förbättras för varje steg – beror det på att gradienterna gick mot noll och därmed inte uppdaterade vikterna? Eller beror det på att modellen helt enkelt inte kan lära sig?
Detta problem förekommer oftare i RNN-modeller när lång minnesspann krävs, det vill säga vid långa meningar.
I den här övningen studerar du problemet på IMDB-data med längre meningar. Data är inläst i variablerna X och y, liksom klasserna Sequential, SimpleRNN, Dense och matplotlib.pyplot som plt. Modellen är förtränad med 100 epoker, och dess vikter och historik är lagrade i filen model_weights.h5 respektive variabeln history.
Den här övningen är en del av kursen
Återkommande neurala nätverk (RNN) för språkmodellering med Keras
Övningsinstruktioner
- Lägg till ett
SimpleRNN-lager i modellen. - Läs in de förtränade vikterna i modellen med metoden
.load_weights(). - Lägg till träningsdatans noggrannhet, tillgänglig via attributet
'acc', i plotten. - Visa plotten med metoden
.show().
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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.____()