我正在寻找一种访问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))
我的目标是在运行时同时添加和减去这些层。 任何帮助表示赞赏!
答案 0 :(得分:1)
我找到了答案,并在其他人正在寻找解决方案的情况下发布。 这可以通过使用冻结Keras图层功能来完成。基本上,您需要将boolean可训练参数传递给图层构造函数以将其设置为不可训练。
例如:
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
希望这会有所帮助!