如何使用 LSTM 对图像进行时间序列预测?
Posted
技术标签:
【中文标题】如何使用 LSTM 对图像进行时间序列预测?【英文标题】:How to do the time series prediction using LSTM for images? 【发布时间】:2020-03-03 22:37:57 【问题描述】:我有 20 张不同时间段的图片
将它们作为数组读取后,我有大约 100000 个像素,其值已知 20 个时间段,我必须使用 LSTM 预测每个像素的第 21 个时间段值。
我正在使用具有 5 个时间值作为输入的 X_train 训练我的模型,而 Y_train 采用第 6 个时间值。
如果我将 X=[500,450,390,350,300] 作为输入,我想要的输出类似于 Y=[260]。
我有一个包含所有形状为 (100769,20) 的图像的数组
我的代码如下,请提出一些建议。
使用的库
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout
from keras.backend import clear_session
创建 5 年的训练数据
for c in range(100769):
X=[]
Y=[]
for d in range (15):
x=res_arr[c][d:d+5]
X.append(x)
y=res_arr[c][d+5]
Y.append(y)
Keras 用法
Initialising the RNN
X_train=(1/6300)*(np.array(X))
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1],1))
Y=np.reshape(Y,(15,1))
Y_train=(1/6300)*(Y)
初始化循环神经网络
regressor = Sequential()
添加第一个 LSTM 层和一些 Dropout 正则化
regressor.add(LSTM(units = 30, return_sequences = True,activation='relu',input_shape = (X_train.shape[1], 1)))
regressor.add(Dropout(0.2))
添加第二个 LSTM 层和一些 Dropout 正则化
regressor.add(LSTM(units = 30, activation='relu',return_sequences = True))
regressor.add(Dropout(0.2))
添加第三个 LSTM 层和一些 Dropout 正则化
regressor.add(LSTM(units = 30,activation='relu', return_sequences = True))
regressor.add(Dropout(0.2))
添加第四个 LSTM 层和一些 Dropout 正则化
regressor.add(LSTM(units = 30,activation='relu'))
regressor.add(Dropout(0.2))
添加输出层
regressor.add(Dense(units = 1,activation='relu'))
编译循环神经网络
regressor.compile(optimizer = 'Adam', loss = 'mean_squared_error',metrics=['accuracy'])
将 RNN 拟合到训练集
regressor.fit(X_train, Y_train)
_, accuracy = regressor.evaluate(X_train, Y_train)
#print('Accuracy: %.2f' % (accuracy*100))
acc.append(accuracy*100)
模型总结
regressor.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (None, 5, 30) 3840
_________________________________________________________________
dropout_1 (Dropout) (None, 5, 30) 0
_________________________________________________________________
lstm_2 (LSTM) (None, 5, 30) 7320
_________________________________________________________________
dropout_2 (Dropout) (None, 5, 30) 0
_________________________________________________________________
lstm_3 (LSTM) (None, 5, 30) 7320
_________________________________________________________________
dropout_3 (Dropout) (None, 5, 30) 0
_________________________________________________________________
lstm_4 (LSTM) (None, 30) 7320
_________________________________________________________________
dropout_4 (Dropout) (None, 30) 0
_________________________________________________________________
dense_1 (Dense) (None, 1) 31
=================================================================
Total params: 25,831
Trainable params: 25,831
Non-trainable params: 0
【问题讨论】:
可以打印一下摘要吗? 我已经附上了上面问题中模型的总结。 【参考方案1】:将最后一层更改为
regressor.add(Dense(units = 1,activation='linear'))
【讨论】:
以上是关于如何使用 LSTM 对图像进行时间序列预测?的主要内容,如果未能解决你的问题,请参考以下文章