这是optimizer用adam,一切正常
这是用adagrad
这是什么情况?learning rate 炸了会这样吗?
数据:
代码:
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))