微调的一种方法是提取一个模型(如在Imagenet上训练的VGG16),添加一个层,然后训练模型。
除了使用Tensorflow.Keras添加的层之外,是否可以对模型层应用正则化?我认为仅对一个层添加正则化不会对结果产生太大影响。
我知道我们可以对添加的层应用正则化:
x = Dense(classes, kernel_regularizer=l2(reg), name="labels")(x)
但是在Keras中是否也可以对其他层应用正则化?在mxnet中可以很容易地完成。
会感激任何帮助。
3条答案
按热度按时间svgewumm1#
这个解决方案应该可以工作。通过迭代模型层,我们可以只添加一个正则化器。然后你可以添加你的密集层。
vc6uscn92#
不幸的是,@DMolony的答案不会更新图形,这意味着您的模型将不会对更改的图层应用正则化。
您可以检查
model.losses
来检查是否正确更新了loss。运行@DMolony的代码片段:我们看到,新的正则化损失没有添加到模型中:
如果要更新图形,需要1)保存更新后的模型配置,2)保存当前权重,3)在添加正则化器后重新加载配置和权重:
现在,模型中的损耗可用:
rekjcdws3#
实际上有一个解决方案,而不需要重新加载模型图及其权重!
您可以利用带有
Layer.add_loss
示例方法的公共kerasapi,它将自动为您跟踪依赖关系。我用这个API更新了这个例子: