【问题标题】:Adding fully connected layer after lstm layer in keras在keras中的lstm层之后添加全连接层
【发布时间】:2019-08-21 16:11:24
【问题描述】:

我正在尝试使用LSTM 使用keras 构建模型。我要搭建的模型结构如图所示

在 keras 中,我知道要创建这样一种 LSTM 层,我应该使用以下代码。

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

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

【问题讨论】:

    标签: python keras lstm


    【解决方案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()
    

    【讨论】:

    • 添加展平层解决了我的问题。 Flatten 层完全连接到下一个 Dense 层。感谢您的帮助!
    【解决方案2】:

    如果您还想要多对多输出,您可以使用TimeDistributed 密集层。如果可以只查看最后一个输出(来自最后一个时间步),您可以删除 return_sequences=True 并插入一个 Dense 层(尽管它比多对一)

    【讨论】:

    • 谢谢,这是我尝试的替代模型。但我想建造这个。输出来自每个 LSTM 单元,然后是获取所有信息的全连接层。
    【解决方案3】:

    您可以在 LSTM 层之后添加一个 Dense 层,无需将“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 层。

    【讨论】:

    • 如果可能的话,我对图片中描述的模型感兴趣。
    • 我不能给你完整的作业,因为它是为大学目的而做的。我可以通过回答更多问题来帮助您吗?
    • 我的主要问题是如何在lstm层之后添加一个全连接层,就像我描述的图片一样。我什至不确定是否可以构建。但这是寻找它的任务。
    • model = Sequential() model.add(LSTM(4, input_shape=(3,1), return_sequences=True)) model.add(Dense(1))
    • 这里最后一个 Dense 层为每个 LSTM 单元提供一个输出,但不是所有 LSTM 单元的一个输出
    猜你喜欢
    • 2017-07-31
    • 2019-01-14
    • 1970-01-01
    • 2020-02-02
    • 2022-01-20
    • 2019-05-22
    • 1970-01-01
    • 2019-03-06
    • 2021-01-08
    相关资源
    最近更新 更多