Python Keras中的整体重量衰减
有没有办法设定Keras中的全局重量衰减Python Keras中的整体重量衰减,python,neural-network,deep-learning,keras,Python,Neural Network,Deep Learning,Keras,有没有办法设定Keras中的全局重量衰减 我知道使用regularizers()的分层方法,但我找不到任何关于设置全局权重衰减的方法的信息。根据github repo(),没有方法进行全局权重衰减。我在这里回答了这个问题,所以其他有同样问题的人不必再寻找答案 为了获得keras中的全局权重衰减,必须将正则化器添加到模型中的每一层。在我的模型中,这些层是批量归一化(beta/gamma正则化器)和密集/卷积(W_正则化器/b_正则化器)层 这里描述了分层正则化:()。无法直接将“全局”权重衰减一次
我知道使用regularizers()的分层方法,但我找不到任何关于设置全局权重衰减的方法的信息。根据github repo(),没有方法进行全局权重衰减。我在这里回答了这个问题,所以其他有同样问题的人不必再寻找答案 为了获得keras中的全局权重衰减,必须将正则化器添加到模型中的每一层。在我的模型中,这些层是批量归一化(beta/gamma正则化器)和密集/卷积(W_正则化器/b_正则化器)层
这里描述了分层正则化:()。无法直接将“全局”权重衰减一次性应用于整个keras模型 但是,正如我所描述的,您可以通过在模型的层中循环并在适当的层上手动应用正则化器,在模型上使用权重衰减。以下是相关的代码片段:
model=keras.applications.ResNet50(包括_top=True,weights='imagenet')
α=0.00002#重量衰减系数
对于model.layers中的图层:
如果isinstance(layer,keras.layers.Conv2D)或isinstance(layer,keras.layers.Dense):
layer.add_损失(lambda:keras.regulatories.l2(alpha)(layer.kernel))
如果hasattr(图层,“偏移正则化器”)和layer.use_偏移:
层加损耗(λ:keras.正则化器l2(α)(层偏差))
发布完整代码,在Keras车型上应用重量衰减(由上述帖子填写):
我想你得一个接一个地做。对于整个模型,没有关于权重衰减的通用设置。
# a utility function to add weight decay after the model is defined.
def add_weight_decay(model, weight_decay):
if (weight_decay is None) or (weight_decay == 0.0):
return
# recursion inside the model
def add_decay_loss(m, factor):
if isinstance(m, tf.keras.Model):
for layer in m.layers:
add_decay_loss(layer, factor)
else:
for param in m.trainable_weights:
with tf.keras.backend.name_scope('weight_regularizer'):
regularizer = lambda: tf.keras.regularizers.l2(factor)(param)
m.add_loss(regularizer)
# weight decay and l2 regularization differs by a factor of 2
add_decay_loss(model, weight_decay/2.0)
return