如何关闭/打开 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 层?的主要内容,如果未能解决你的问题,请参考以下文章