Luc*_*ito 16 time-series forward prediction lstm keras
我想预测每周可预测的某些值(低SNR).我需要预测一年中形成的一年的整个时间序列(52个值 - 图1)
我的第一个想法是使用Keras over TensorFlow开发多对多LSTM模型(图2).我正在使用52输入层(前一年的给定时间序列)和52预测输出层(明年的时间序列)训练模型.train_X的形状是(X_examples,52,1),换言之,要训练的X_examples,每个1个特征的52个时间步长.据我所知,Keras会将52个输入视为同一域的时间序列.train_Y的形状是相同的(y_examples,52,1).我添加了一个TimeDistributed层.我的想法是算法会将值预测为时间序列而不是孤立值(我是否正确?)
Keras的模型代码是:
y = y.reshape(y.shape[0], 52, 1)
X = X.reshape(X.shape[0], 52, 1)
# design network
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mean_squared_error', optimizer='adam')
# fit network
model.fit(X, y, epochs=n_epochs, batch_size=n_batch, verbose=2)
Run Code Online (Sandbox Code Playgroud)
问题是算法没有学习这个例子.它预测的值与属性的值非常相似.我是否正确建模了问题?
第二个问题:另一个想法是用1输入和1输出训练算法,但是在测试期间如何在不查看'1输入'的情况下预测整个2015时间序列?测试数据将具有与训练数据不同的形状.
Dan*_*ler 24
分享关于数据太少的相同问题,你可以这样做.
首先,将值保持在-1和+1之间是个好主意,所以我先将它们标准化.
对于LSTM模型,您必须确保使用return_sequences=True
.
您的模型没有"错误",但可能需要更多或更少的层或单元来实现您的需求.(虽然没有明确的答案).
训练模型以预测下一步:
你需要的只是将Y作为移位的X传递:
entireData = arrayWithShape((samples,52,1))
X = entireData[:,:-1,:]
y = entireData[:,1:,:]
Run Code Online (Sandbox Code Playgroud)
使用这些训练模型.
预测未来:
现在,为了预测未来,由于我们需要使用预测元素作为更多预测元素的输入,我们将使用循环并制作模型stateful=True
.
使用以下更改创建与前一个相同的模型:
stateful=True
(batch_size,None, 1)
- 这允许可变长度复制先前训练的模型的权重:
newModel.set_weights(oldModel.get_weights())
Run Code Online (Sandbox Code Playgroud)
一次仅预测一个样本,并且model.reset_states()
在开始任何序列之前永远不会忘记调用.
首先用您已经知道的序列进行预测(这将确保模型正确地准备其状态以预测未来)
model.reset_states()
predictions = model.predict(entireData)
Run Code Online (Sandbox Code Playgroud)
按照我们训练的方式,预测的最后一步将是未来的第一个元素:
futureElement = predictions[:,-1:,:]
futureElements = []
futureElements.append(futureElement)
Run Code Online (Sandbox Code Playgroud)
现在我们创建一个循环,其中此元素是输入.(由于有状态,模型将理解它是前一个序列的新输入步骤而不是新序列)
for i in range(howManyPredictions):
futureElement = model.predict(futureElement)
futureElements.append(futureElement)
Run Code Online (Sandbox Code Playgroud)
此链接包含一个完整示例,用于预测两个功能的未来:https://github.com/danmoller/TestRepo/blob/master/TestBookLSTM.ipynb
归档时间: |
|
查看次数: |
9560 次 |
最近记录: |