如何关闭/打开 LSTM 层?

Posted

技术标签:

【中文标题】如何关闭/打开 LSTM 层?【英文标题】:How to switch Off/On an LSTM layer? 【发布时间】:2019-06-14 13:03:08 【问题描述】:

我正在寻找一种访问 LSTM 层的方法,以便层的加减是事件驱动的。所以当有函数触发的时候可以加减Layer。 例如(假设): 如果 a = 2,则添加一个 LSTM 层,如果 a = 3,则删除一个 LSTM 层。

这里 a = 2 和 a= 3 应该是一个 python 函数,它返回特定值,基于该值应该添加或删除 LSTM 层。我想在图层中添加一个开关功能,以便可以根据python函数打开或关闭它。

有可能吗?

目前,我需要对所需的层进行硬编码。例如:

# Initialising the RNN 
regressor = Sequential()

# Adding the first LSTM layer and some Dropout regularization 
regressor.add(LSTM(units = 60, return_sequences = True, input_shape = 
(X_train.shape[1], X_train.shape[2])))
#regressor.add(Dropout(0.1))

# Adding the 2nd LSTM layer and some Dropout regularization 
regressor.add(LSTM(units = 60, return_sequences = True))
regressor.add(Dropout(0.1))

我的目标是在运行时添加和减去这些层。 任何帮助表示赞赏!

【问题讨论】:

标题有点误导,但here 和here 是两个相关的问题。 【参考方案1】:

我找到了答案并发布,以防其他人正在寻找解决方案。 这可以通过使用冻结 Keras 层功能来完成。基本上,您需要将布尔可训练参数传递给层构造函数以将其设置为不可训练。

例如:

 frozen_layer = Dense(32, trainable=False)

此外,如果您想在实例化后将层的可训练属性设置为 True 或 False。通过在修改可训练属性后在模型上调用 compile()。例如:

    x = Input(shape=(32,))
    layer = Dense(32)
    layer.trainable = False
    y = layer(x)

    frozen_model = Model(x, y)
    # the weights of layer will not be updated during training for below model
    frozen_model.compile(optimizer='rmsprop', loss='mse')

    layer.trainable = True
    trainable_model = Model(x, y)
    # the weights of the layer will be updated during training 
    # (which will also affect the above model since it uses the same layer instance)
    trainable_model.compile(optimizer='rmsprop', loss='mse')

    frozen_model.fit(data, labels)  # this does NOT update the weights of layer
    trainable_model.fit(data, labels)  # this updates the weights of layer

希望这会有所帮助!

【讨论】:

以上是关于如何关闭/打开 LSTM 层?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keras 的两个 LSTM 层之间添加注意力层

Layer组件多个iframe弹出层打开与关闭及参数传递

多元 LSTM 股票预测

cad 里怎么单独显示某一层图

CAD图纸上指定图层如何进行关闭?

如何在 Pytorch LSTM/GRU/RNN 中指定不同的层大小