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

问题描述 投票:1回答:2

我正在进行多变量时间序列分析。我打算用不同的批量大小和超参数运行这个网络很多次。因此,到目前为止,我一直保持一般性和假设

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))

如果输出包含最后一个时间步,即我正在寻找的f(t + 1),那么return_sequences = True是什么问题?我想什么都没有,但这并没有解决根本问题,即我不完全了解如何构建这些网络。就像我说的那样,在开始深入实验之前,我希望尽可能保持一般性并深入了解网络。

我将运行具有非常不同的B,T和N值的实验,以查看哪种方法效果最好。

我试过阅读文档和诸如此类的东西,但我很困惑并且感到沮丧,所以我想我会转向社区。

python keras lstm rnn
2个回答
0
投票

无需在第二个循环图层中指定input_shape参数。当复现层是网络中的第一层时,明确需要此参数,但不是其他参数。

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


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数组(T,N),但第一个LSTM提供由(1,T,N)组成的3d数组

© www.soinside.com 2019 - 2024. All rights reserved.