Проблема зникання градієнта
Інша можлива проблема з градієнтами — коли вони зникають, тобто прямують до нуля. Це значно складніше виправити, бо проблему важче виявити. Якщо функція втрат не поліпшується на кожному кроці, це тому, що градієнти стали нульовими і ваги не оновилися? Чи тому, що модель не здатна навчатися?
Ця проблема частіше трапляється в моделях RNN, коли потрібна довга пам'ять (дуже довгі речення).
У цій вправі ви спостерігатимете цю проблему на даних IMDB з обраними довшими реченнями. Дані завантажено у змінні X та y, а також імпортовано класи Sequential, SimpleRNN, Dense і matplotlib.pyplot як plt. Модель була попередньо натренована протягом 100 епох, її ваги та історію збережено у файлі model_weights.h5 та змінній history.
Ця вправа є частиною курсу
Recurrent Neural Networks (RNNs) для моделювання мови з Keras
Інструкції до вправи
- Додайте шар
SimpleRNNдо моделі. - Завантажте попередньо натреновані ваги в модель за допомогою методу
.load_weights(). - Додайте до графіка точність на тренувальних даних, доступну в атрибуті
'acc'. - Відобразьте графік за допомогою методу
.show().
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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.____()