Python LSTM:如何有效理解和使用return_sequences=False?
我正在进行多元时间序列分析。我打算用不同的批量大小和超参数多次运行这个网络。因此,到目前为止,我一直保持一般性,并假设Python LSTM:如何有效理解和使用return_sequences=False?,python,keras,lstm,rnn,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) u
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))
但是,我可以让它工作
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))
如果输出包含最后一个timestep,即我正在寻找的f(t+1),那么return_sequences=True有什么问题?我想这并不能解决根本问题,那就是我不完全理解如何构建这些网络。正如我所说的,我希望在开始进行实验之前,尽可能地将事情概括起来,并深入了解网络
我将用非常不同的B、T和N值进行实验,看看哪一个效果最好
我试着阅读文档等等,但是我被卡住了,感到沮丧,所以我想我应该求助于社区。没有必要在第二层中指定
输入形状
参数。当递归层是网络中的第一层时,明确要求使用此参数,否则不需要
如果希望在每个重复层指定输入批处理形状,请记住设置参数
stateful=True
以使LSTMs有状态(并且仅在网络的第一层使用此参数) 希望下面的代码有帮助
例如,如果每层中的节点数为150
model.add(LSTM(150, return_sequences=True,input_shape=(T,N)))
model.add(LSTM(150))
model.add(Dense(1))
并在代码的第二个lstm中删除输入_shape=(T,N)。您已指定它需要2D数组(T,N),但第一个lstm提供了一个由(1,T,N)组成的3d数组。第一个网络(其中return_sequences设置为False)是否产生错误?或者它只是没有产生预期的结果?错误预期lstm_2有两个维度,但在删除我得到的输入_形状参数后它收到了形状数组(1,T,N):检查目标时出错:预期lstm_2有两个维度,但形状数组(1,8,11)是网络中的第一个lstm层还是第一层?是,第一层是您在问题中看到的第一个LSTM。也许本文将帮助您诊断问题:不,我已经阅读了那篇文章。他们从不返回\u sequences=False。感谢您的评论!我得到了另一个错误,然而,这是你得到的错误,return_sequences=True返回一个3D数组,如果你有多个lstm层,你应该将它设置为True,除了最后一个…并且你已经写了你的输入形状是(T,N),我希望你在将它给lstm之前已经将它转换为3D数组(记录总数(行),T(时间步),N(尺寸的数量)