Keras, Tensorflow: 冻结某层中的特定变量

创建的自定义层中含有W和m两个可训练变量:

self.W = self.add_weight(name='W', shape=(input_shape[0][-1].value, self.classes), trainable=True)
self.m = self.add_weight(name='m', shape=(1, 1), trainable=True)

现在想将m单独设置为不可训练,即单独冻结变量m:

# 获取层
l = model.get_layer('layer_name')  # 层的名字
# 列表中的第二个元素,即m,此处要根据实际情况调整,可使用调试器查看
l.non_trainable_variables.append(l.trainable_variables[1])  
# 同上
l.trainable_variables.pop()
# 修改完列表后需要重新编译,参数根据实际情况调整
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

思路是将自定义层中trainable_variables列表中想要冻结的元素转移到non_trainable_variables列表,进行此操作时trainable_vweights和non_trainable_weights列表会一并自动更改。此外修改完之后别忘重新compile。

由于没找到keras自带方法,所以采用直接修改层参数的方法来实现,如有更好的办法还请多多指教。

你可能感兴趣的:(python,机器学习,python,tensorflow,深度学习,神经网络)