Проблема взрывного градиента
В видеоуроке вы познакомились с двумя проблемами, которые могут возникнуть при работе с моделями RNN: затухающим и взрывным градиентом.
В этом упражнении рассматривается проблема взрывного градиента: вы увидите, как производная функции может расти экспоненциально, и узнаете, как решить эту проблему с помощью простого приёма.
Данные уже загружены в среду как X_train, X_test, y_train и y_test.
Вы будете использовать оптимизатор Stochastic Gradient Descent (SGD) и Mean Squared Error (MSE) в качестве функции потерь.
На первом шаге вы наблюдаете взрыв градиента, вычисляя MSE на обучающей и тестовой выборках. На шаге 2 вы измените настройки оптимизатора с помощью параметра clipvalue, чтобы устранить проблему.
Stochastic Gradient Descent в Keras загружен как SGD.
Это упражнение является частью курса
Рекуррентные нейронные сети (RNN) для языкового моделирования с Keras
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Create a Keras model with one hidden Dense layer
model = Sequential()
model.add(Dense(25, input_dim=20, activation='relu', kernel_initializer=he_uniform(seed=42)))
model.add(Dense(1, activation='linear'))
# Compile and fit the model
model.compile(loss='mean_squared_error', optimizer=____(learning_rate=0.01, momentum=0.9))
history = model.fit(X_train, y_train, validation_data=(____, ____), epochs=100, verbose=0)
# See Mean Square Error for train and test data
train_mse = model.____(X_train, y_train, verbose=0)
test_mse = model.evaluate(X_test, y_test, verbose=0)
# Print the values of MSE
print('Train: %.3f, Test: %.3f' % (____, ____))