LSTM:如何有效地理解和使用return_sequences = False?

时间:2018-09-10 21:34:44

标签: python keras lstm rnn

我正在执行多元时间序列分析。我打算使用不同的批处理大小和超参数来多次运行此网络。因此,到目前为止,我一直保持一般,并假设

B := Number of batches

T := Number of timesteps per batch

N := Number of features per timestep 

我的最终目标是批量调用model.predict(当然,这还没有用于训练)。这样看起来像这样

prediction = model.predict(unknown)
unknown.shape = (T, N)
prediction.shape = (N,)

我一直在尝试网络负载。

我无法正常工作

model.add(LSTM(N, input_shape=(T, N), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(N, input_shape=(T, N), return_sequences=False)) 
model.add(Dense(N))

但是,我可以使它工作

model.add(LSTM(N, input_shape=(T, N), return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(N, input_shape=(T, N), return_sequences=True)) # True here 
model.add(Dense(N))

return_sequences =怎么了?如果输出包含最后一个时间步,即我要寻找的f(t + 1),这是正确的吗?我想什么也没有,但这不能解决根本的问题,即我不完全了解如何构建这些网络。就像我说的那样,在开始进行实验之前,我想让事情尽可能的笼统并深入了解网络。

我将以不同的B,T和N值进行实验,看看哪种效果最好。

我已经尝试阅读文档,但是我很困惑并且感到沮丧,所以我想我应该去找社区。

2 个答案:

答案 0 :(得分:0)

无需在第二个循环层中指定input_shape参数。当循环层是网络中的第一层时,此参数是明确要求的,但并非如此。

如果希望在每个循环层指定输入批处理形状,请记住设置参数stateful = True以使LSTM保持有状态(并且仅在网络的第一层使用此参数)。

答案 1 :(得分:0)

希望以下代码有帮助 例如,如果每层中的节点数为150

model.add(LSTM(150, return_sequences=True,input_shape=(T,N)))
model.add(LSTM(150))
model.add(Dense(1))

并在代码的第二个lstm中删除input_shape =(T,N)。您已指定期望使用2D array(T,N),但第一个LSTM提供了一个由(1,T,N)组成的3d数组