对于Keras LSTM,传递滞后特征与特征时间步长的区别是什么?

时间:2017-09-01 12:54:24

标签: python machine-learning time-series keras lstm

我熟悉LSTM,我需要明确某些事情。我使用t-300建模时间序列:t-1来预测t:t + 60。我的第一个方法是建立一个像这样的LSTM:

# fake dataset to put words into code:
X = [[1,2...299,300],[2,3,...300,301],...]
y = [[301,302...359,360],[302,303...360,361],...]

# LSTM requires (num_samples, timesteps, num_features)
X = X.reshape(X.shape[0],1,X.shape[1])

model = Sequential()
model.add(LSTM(n_neurons[0], batch_input_shape=(n_batch, X.shape[1], X.shape[2]), stateful=True))
model.add(Dense(y.shape[1]))
model.compile(loss='mse', optimizer='adam')

model.fit(X, y, epochs=1, batch_size=1, verbose=1, shuffle=False)

使用我的真实数据集,结果不是最理想的,并且在CPU上,它能够在20分钟内训练大约400,000个样本的1个纪元。网络在一个时期之后迅速收敛,对于我提供的任何一组点数,都会产生相同的结果。

我最近的改变是以下列方式重塑X:

X = X.reshape(X.shape[0],X.shape[1],1)

训练似乎进展缓慢(我没有尝试过完整的数据集),但速度明显变慢。在一个2,800个样本的单个时期内训练大约需要5分钟。我玩弄了一小部分我的真实数据和少量的时代,这看起来很有希望。我没有为不同的输入获得相同的输出。

有谁能帮我理解这里发生的事情?

1 个答案:

答案 0 :(得分:1)

在Keras中,(num_samples,timesteps,num_features)中的时间步长确定 BPTT 将传回错误的步数。

反过来,这需要更多的时间来完成你所观察到的减速。

在您的情况下,

X.reshape(X.shape[0], X.shape[1], 1)是正确的做法,因为您拥有的是一个具有300次步长的单一功能。