【问题标题】:multi layer LSTM net with stateful=Truestateful=True 的多层 LSTM 网络
【发布时间】:2018-10-26 16:45:57
【问题描述】:

我的问题是这段代码有意义吗?如果这是有道理的,那么目的应该是什么?

model.add(LSTM(18, return_sequences=True,batch_input_shape=(batch_size,look_back,dim_x), stateful=True))
model.add(Dropout(0.3))
model.add(LSTM(50,return_sequences=False,stateful=False))
model.add(Dropout(0.3))
model.add(Dense(1, activation='linear'))

因为如果我的第一个 LSTM 层将我的状态从一个批次返回到下一个批次,为什么我的第二个 LSTM 层不应该这样做?

我很难理解 Keras 中的 LSTM 机制,所以我非常感谢任何形式的帮助 :)

如果你对这篇文章投了反对票,你能在命令中告诉我为什么吗?谢谢。

【问题讨论】:

    标签: keras lstm multi-layer


    【解决方案1】:

    您的程序是一个回归问题,其中您的模型由 2 个 lstm 层组成,每个层有 18 层和 50 层,最后是一个密集层来显示回归值。

    LSTM 需要 3D 输入。因为您的第一个 LSTM 层的输出将进入第二个 LSTM 层的输入。第二个 LSTM 层的输入也应该是 3D 的。所以我们在 1st 中将返回序列设置为 true,因为它将返回一个 3D 输出,然后可以将其用作第二个 LSTM 的输入。

    您的第二个 LSTM 值不会返回序列,因为在第二个 LSTM 之后您有一个不需要 3D 值作为输入的密集层。

    [更新]

    在 keras 中,默认情况下,LSTM 状态会在每批训练数据后重置,因此如果您不希望在每批训练后重置状态,您可以设置 stateful=True。如果将 LSTM 设为有状态,则批次的最终状态将用作下一批的初始状态。 您可以稍后通过调用reset_states() 来重置状态

    【讨论】:

    • 如果我理解你是对的,你正在声明 return_sequence 是如何工作的,但我更关心的是满足的情况
    • 在LSTM中,每批训练数据后状态都会被重置,所以如果希望每批后状态不被重置可以设置stateful=True,,,,,可以保持状态在你的 lstm 层中
    • 是的。但是有没有任何目的让一层 stateful=True 下一层 stateful = False?
    • 代码只是说在第一层中每个批次后权重不会重置,因此批次的最终状态将用作另一批次的初始状态...在第二个图层状态在每批后重置。目的是一个非常通用的情况,也许他们在超参数调整期间发现它最合适。
    • 据我所知,只有内存单元的状态被重置,而不是 lstm 单元的权重
    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多