愉快的学习就从翻译开始吧_Multivariate Time Series Forecasting with LSTMs in Keras_6_Complete Example
The complete example is listed below.完整的示例如下:NOTE: This example assumes you have prepared the data correctly, e.g. converted the downloaded “raw.csv” to the prepared “pollution.csv“. See the first part of this tutorial.注意:这个例子假设你已经准备好了数据,例如 将下载的“raw.csv”转换为准备好的“pollution.csv”。 请参阅本教程的第一部分。
from math import sqrt from numpy import concatenate from matplotlib import pyplot from pandas import read_csv from pandas import DataFrame from pandas import concat from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import LabelEncoder from sklearn.metrics import mean_squared_error from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM # convert series to supervised learning def series_to_supervised(data, n_in=1, n_out=1, dropnan=True): n_vars = 1 if type(data) is list else data.shape[1] df = DataFrame(data) cols, names = list(), list() # input sequence (t-n, ... t-1) for i in range(n_in, 0, -1): cols.append(df.shift(i)) names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)] # forecast sequence (t, t+1, ... t+n) for i in range(0, n_out): cols.append(df.shift(-i)) if i == 0: names += [('var%d(t)' % (j+1)) for j in range(n_vars)] else: names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)] # put it all together agg = concat(cols, axis=1) agg.columns = names # drop rows with NaN values if dropnan: agg.dropna(inplace=True) return agg # load dataset dataset = read_csv('pollution.csv', header=0, index_col=0) values = dataset.values # integer encode direction encoder = LabelEncoder() values[:,4] = encoder.fit_transform(values[:,4]) # ensure all data is float values = values.astype('float32') # normalize features scaler = MinMaxScaler(feature_range=(0, 1)) scaled = scaler.fit_transform(values) # frame as supervised learning reframed = series_to_supervised(scaled, 1, 1) # drop columns we don't want to predict reframed.drop(reframed.columns[[9,10,11,12,13,14,15]], axis=1, inplace=True) print(reframed.head()) # split into train and test sets values = reframed.values n_train_hours = 365 * 24 train = values[:n_train_hours, :] test = values[n_train_hours:, :] # split into input and outputs train_X, train_y = train[:, :-1], train[:, -1] test_X, test_y = test[:, :-1], test[:, -1] # reshape input to be 3D [samples, timesteps, features] train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1])) test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1])) print(train_X.shape, train_y.shape, test_X.shape, test_y.shape) # design network model = Sequential() model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2]))) model.add(Dense(1)) model.compile(loss='mae', optimizer='adam') # fit network history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False) # plot history pyplot.plot(history.history['loss'], label='train') pyplot.plot(history.history['val_loss'], label='test') pyplot.legend() pyplot.show() # make a prediction yhat = model.predict(test_X) test_X = test_X.reshape((test_X.shape[0], test_X.shape[2])) # invert scaling for forecast inv_yhat = concatenate((yhat, test_X[:, 1:]), axis=1) inv_yhat = scaler.inverse_transform(inv_yhat) inv_yhat = inv_yhat[:,0] # invert scaling for actual test_y = test_y.reshape((len(test_y), 1)) inv_y = concatenate((test_y, test_X[:, 1:]), axis=1) inv_y = scaler.inverse_transform(inv_y) inv_y = inv_y[:,0] # calculate RMSE rmse = sqrt(mean_squared_error(inv_y, inv_yhat)) print('Test RMSE: %.3f' % rmse)Running the example first creates a plot showing the train and test loss during training.运行示例,首先创建一个训练过程中训练和测试的损失图Interestingly, we can see that test loss drops below training loss. The model may be overfitting the training data. Measuring and plotting RMSE during training may shed more light on this.有趣的是,我们可以看到测试损失低于训练损失。 该模型可能是过拟合训练数据。 在训练过程中测量和绘制RMSE可能会对此有更多的了解。
Line Plot of Train and Test Loss from the Multivariate LSTM During Training
The Train and test loss are printed at the end of each training epoch. At the end of the run, the final RMSE of the model on the test dataset is printed.训练和测试损失在每个训练时期结束时打印。 在运行结束时,将打印测试数据集上模型的最终RMSE。
We can see that the model achieves a respectable RMSE of 26.496, which is lower than an RMSE of 30 found with a persistence model.我们可以看到该模型实现了26.496的可观RMSE,低于持续模型中发现的RMSE30。
123456789101112 | ...Epoch 46/500s - loss: 0.0143 - val_loss: 0.0133Epoch 47/500s - loss: 0.0143 - val_loss: 0.0133Epoch 48/500s - loss: 0.0144 - val_loss: 0.0133Epoch 49/500s - loss: 0.0143 - val_loss: 0.0133Epoch 50/500s - loss: 0.0144 - val_loss: 0.0133Test RMSE: 26.496 |
This model is not tuned. Can you do better?
这个模型没有调整,你能做的更好吗?
Let me know your problem framing, model configuration, and RMSE in the comments below.
在下面的评论中让我知道你的问题 无论是框架,模型配置还是RMSE.
还没搞懂的地方前面说LSTM的输入格式应该是(sample, timestep, featrues), 可这里明显只有两个值?model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))终于搞明白了,input 必须是三维的,但是定义LSTM的时候会假设你有一个或多个sample,所以只需要指定timesteps和features
还有神经元的个数,网络层数如何来确定比较好?这些与什么有关系呢?头大呀,人工智能真不容易
阅读更多
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting with Long Short-Term Memory Networks in Python_0
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting with Long Short-Term Memory Networks in Python_1
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_7_Persistence Model_Complete Example
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_12_Multi-Step LSTM Network_Complete Example
- 愉快的学习就从翻译开始吧_How to Convert a Time Series to a Supervised Learning Problem in Python_0
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_9_Multi-Step LSTM Network_Fit LSTM Network
- 愉快的学习就从翻译开始吧_How to Convert a Time Series to a Supervised Learning Problem in Python_2
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_4_Persistence Model_Prepare data
- 愉快的学习就从翻译开始吧_How to Convert a Time Series to a Supervised Learning Problem in Python_3
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting _2_Shampoo Sales Dataset
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_5_Persistence Model_Make Forecasts
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_11_Multi-Step LSTM Network_Invert Transforms
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_3_Data Preparation and Model Evaluation
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_8_Multi-Step LSTM Network_Prepare Data
- 愉快的学习就从翻译开始吧_Multi-step Time Series Forecasting_13_Multi-Step LSTM Network_Extensions&Summary
- 愉快的学习就从翻译开始吧_traces_A Python library for unevenly-spaced time series analysis.
- [译]Time Series Forecasting with the Long Short-Term Memory Network in Python
- 在电力智能测量数据应用中的分层时间序列预测正则化(Regularization in Hierarchical Time Series Forecasting with Application to)
- 愉快的学习就从翻译开始吧_Multi-Step or Sequence Forecasting
- 开始翻译WPF in Action with Visual Studio 2008