LSTM网络,为什么我这个adagrad不对劲?

这是optimizer用adam,一切正常

img

img

这是用adagrad

img

img

这是什么情况?learning rate 炸了会这样吗?

数据:

img

代码:

model = Sequential()
model.add(LSTM(input_shape=(12,1),
               units=24,
               activation="relu",
               return_sequences=False))
model.add(Dense(1))
model.add(Activation('linear'))
model.compile(loss='mse', optimizer="adagrad")


early_stop = EarlyStopping(monitor='val_loss', patience=50, verbose=1)

#train the model
model.fit(Xtrain, Ytrain,
          batch_size = 12,
          epochs=300,
          verbose=0,
          callbacks=[early_stop],
          validation_split=0.1,
          shuffle=False)

# Predicting
allPredict = model.predict(np.reshape(X, (X.shape[0],window,1)))

#Transforming to original scale
allPredict_original_scale = scaler.inverse_transform(allPredict)
allPredictPlot = np.empty_like(data)
allPredictPlot[:, :] = np.nan
allPredictPlot[window:, :] = allPredict_original_scale

# Plot true and in-sample forecast values
plt.figure()
plt.plot(scaler.inverse_transform(data), label='True Data')
plt.plot(allPredictPlot, label='One-Step Prediction')
plt.legend()
plt.show()

# Checking training and test score
trainScore = math.sqrt(mean_squared_error(Ytrain, allPredict[:train_size,0]))
testScore = math.sqrt(mean_squared_error(Ytest, allPredict[-test_size:,0]))

print('Training Data RMSE: {0:.2f}'.format(trainScore))
print('Test Data RMSE: {0:.2f}'.format(testScore))

#Dynamical Prediction
dynamic_prediction = np.copy(data[:len(data) - test_size])

for i in range(len(data) - test_size, len(data)):
    last_feature = np.reshape(dynamic_prediction[i-window:i], (1,window,1))
    next_pred = model.predict(last_feature)
    dynamic_prediction = np.append(dynamic_prediction, next_pred)

# Transform forecast values to original scale
dynamic_prediction = dynamic_prediction.reshape(-1,1)
dynamic_prediction_original_scale = scaler.inverse_transform(dynamic_prediction)

# Plot
test_index = np.arange(len(data) - test_size, len(data), 1)

plt.figure()
plt.plot(scaler.inverse_transform(data[:len(data) - test_size]), label='Training Data')
plt.plot(test_index, scaler.inverse_transform(data[-test_size:]), label='Testing Data')
plt.plot(test_index, dynamic_prediction_original_scale[-test_size:], label='Out of Sample Prediction')
plt.legend(loc = "upper left")
plt.show()

# Compute RMSE score on test data
testScore = math.sqrt(mean_squared_error(Ytest, dynamic_prediction[-test_size:]))
print('Dynamic Forecast RMSE: {0:.2f}'.format(testScore))