Tensorflow 如何在keras中堆叠多个lstm? 我使用深度学习lib库,尝试用多个LSTM堆栈,没有运气。 下面是我的代码 model = Sequential() model.add(LSTM(100,input_shape =(time_steps,vector_size))) model.add(LSTM(100))

Tensorflow 如何在keras中堆叠多个lstm? 我使用深度学习lib库,尝试用多个LSTM堆栈,没有运气。 下面是我的代码 model = Sequential() model.add(LSTM(100,input_shape =(time_steps,vector_size))) model.add(LSTM(100)),tensorflow,deep-learning,keras,lstm,keras-layer,Tensorflow,Deep Learning,Keras,Lstm,Keras Layer,上述代码在第三行返回错误异常:输入0与层lstm_28不兼容:预期ndim=3,发现ndim=2 输入X是形状张量(100250,50)。我正在tensorflow后端运行keras您需要将return_sequences=True添加到第一层,以便其输出tensor具有ndim=3(即批量大小、时间步长、隐藏状态) 请参见以下示例: # expected input data shape: (batch_size, timesteps, data_dim) model = Sequentia

上述代码在第三行返回错误
异常:输入0与层lstm_28不兼容:预期ndim=3,发现ndim=2


输入X是形状张量(100250,50)。我正在tensorflow后端运行keras

您需要将
return_sequences=True
添加到第一层,以便其输出tensor具有
ndim=3
(即批量大小、时间步长、隐藏状态)

请参见以下示例:

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

发件人:(搜索“堆叠lstm”)

对@Danieladivardana答案的详细解释。 我们需要为除最后一层之外的所有LSTM层添加return_sequences=True

将此标志设置为True可让Keras知道LSTM输出应包含所有历史生成的输出以及时间戳(3D)。因此,下一个LSTM层可以进一步对数据进行处理

如果此标志为false,则LSTM仅返回最后一次输出(2D)。这样的输出对于另一个LSTM层来说不够好

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))
旁注::添加最后一个密集层,以获得用户所需格式的输出。此处密集(10)表示将使用softmax激活生成10个不同的类输出


如果将LSTM用于时间序列
,则应使用密集(1)。因此,只给出一个数字输出。

这样的示例代码应该可以工作:

regressor = Sequential()

regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (33, 1)))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

regressor.add(Dense(units = 1))

regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

regressor.fit(X_train, y_train, epochs = 10, batch_size = 4096)

在选择lstm中的神经元数量时,是否有最佳实践?我正在努力使模型性能最大化!:)我们是否也应该设置
return\u state=True
?它的作用是什么?在LSTM中,如果你选择太多的神经元,你将过度适应,如果你选择太少,你将不适应。正确的数字取决于数据中的模式和数据集的大小(可能还有许多其他因素)。从一些小的开始,可能在32-128范围内,以在调试期间保持快速的训练时间。然后测试更大的数值,直到结果开始恶化。非常感谢。从昨晚起就一直在这个问题上纠缠不休。最后一个密集层的大小不是时间序列(序列数据)是否被使用的函数,输出层的大小由您想要的输出决定。对于预测模型,这可能只是一个标量,但对于分类,您显然希望输出一个热向量,该向量等于用户为目标创建的热向量的大小,或者使用稀疏分类交叉熵创建的tensorflow。