Problém mizejících gradientů
Druhým možným problémem s gradienty je jejich mizení – gradienty se blíží nule. Tento problém se řeší obtížněji, protože ho není snadné odhalit. Pokud se ztrátová funkce v každém kroku nezlepšuje, je to proto, že gradienty klesly na nulu a váhy se neaktualizovaly? Nebo model prostě není schopen se učit?
Tento problém se u modelů RNN vyskytuje častěji tehdy, když je potřeba dlouhá paměť (například při práci s dlouhými větami).
V tomto cvičení sledujeme daný problém na datech IMDB s vybranými delšími větami. Data jsou načtena do proměnných X a y, k dispozici jsou také třídy Sequential, SimpleRNN, Dense a matplotlib.pyplot jako plt. Model byl předtrénován po dobu 100 epoch – jeho váhy a průběh trénování jsou uloženy v souboru model_weights.h5 a v proměnné history.
Toto cvičení je součástí kurzu
Rekurentní neuronové sítě (RNN) pro jazykové modelování s Keras
Pokyny k cvičení
- Přidej do modelu vrstvu
SimpleRNN. - Načti předtrénované váhy do modelu pomocí metody
.load_weights(). - Přidej do grafu přesnost na trénovacích datech dostupnou pod atributem
'acc'. - Zobraz graf pomocí metody
.show().
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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.____()