Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python LSTM:如何有效理解和使用return_sequences=False?_Python_Keras_Lstm_Rnn - Fatal编程技术网

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(尺寸的数量)