在keras的lstm层之后添加完全连接的层

时间:2019-03-31 08:32:28

标签: python keras lstm

我正在尝试使用LSTM使用keras构建模型。图片中描述了我要构建的模型结构。 The first layer is LSTM layer

在keras中,我知道创建这样的LSTM层应该遵循以下代码。

model = Sequential()
model.add(LSTM(4, input_shape=(3,1), return_sequences=True))

4是每个LSTM单元的输出大小。 return_sequence配置many to many结构。但是我不知道如何添加密集层来从LSTM细胞中获取所有信息并输出多个神经元。我什至不知道是否可能。我将不胜感激。

3 个答案:

答案 0 :(得分:1)

此答案基于SimonC的答案。您可以添加展平层。根据您的目的,它可能有不同的方式

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=True))

    model.add(Dense(1, activation = 'linear'))
    model.add(Flatten())

    model.add(Dense(1))
    return model
LSTM_WINDOW_SIZE = 5
model3 = model()
model3.summary()

或((将Flatten层移到Dense层之前)

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=True))
    model.add(Flatten())

    model.add(Dense(1, activation = 'linear'))

    model.add(Dense(1)) # redundant for this model, just for illustration
    return model
LSTM_WINDOW_SIZE = 5
model3 = model()
model3.summary()

答案 1 :(得分:0)

如果您还希望获得大量输出,则可以使用TimeDistributed密集层。如果可以查看最后一个输出(从最后一个时间步长开始),可以删除return_sequences = True并插入一个Dense层(尽管多对一)

答案 2 :(得分:0)

您只需在LSTM层之后添加一个密集层,而无需将'return_sequences'设置为False (仅当您在另一个LSTM层之后有第二个LSTM层时才需要)。我最近制作了一个LSTM模型,以根据变量的历史来预测一些将来的值。这对我来说很好:

def model():
    model = Sequential()
    model.add(Dense(128, input_shape = (LSTM_WINDOW_SIZE,1)))
    model.add(LSTM(units=5,
                   return_sequences=False)
    model.add(Dense(1))
    model.add(Activation('linear'))

return model

您可以根据需要删除第一个Dense层。