我正在寻找一种访问LSTM层的方法,以使层的添加和减少是事件驱动的。因此,当有功能触发器时,可以添加或减去图层。
例如(假设):
如果a = 2,则添加LSTM层;如果a = 3,则移除LSTM层。
这里a = 2和a = 3应该是一个python函数,该函数返回应添加或删除LSTM层的特定值。我想向该图层添加一个switch函数,以便可以基于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))
我的目标是在运行时添加和减去这些层。
任何帮助表示赞赏!
最佳答案
我找到了答案,并在其他人正在寻找解决方案的情况下发布。
这可以通过使用冻结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
希望这可以帮助!!
关于python - 如何关闭/打开LSTM层?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54284898/