1 回答
TA贡献1816条经验 获得超6个赞
根据文档,事实证明,lambda 函数不应该带有任何参数。然而,当我没有传递参数时,它导致了另一个非常奇怪的错误(这是关于Dense
没有 的层depthwise_kernel
,这是显而易见的,不应该发生,但不知何故它发生了)。
因此,我的最终解决方案是定义两个单独的正则化函数,如上面链接中的建议。
def add_l2_regularization_kernel(layer, weight):
def _add_l2_regularization_kernel():
l2 = tf.keras.regularizers.l2(weight)
return l2(layer.kernel)
return _add_l2_regularization_kernel
def add_l2_regularization_depthwise_kernel(layer, weight):
def _add_l2_regularization_depthwise_kernel():
l2 = tf.keras.regularizers.l2(weight)
return l2(layer.depthwise_kernel)
return _add_l2_regularization_depthwise_kernel
if config.has("regularizer"):
if config.regularizer.name == "l2":
l2_reg = config.regularizer.weight
for layer in model.layers:
if isinstance(layer, tf.keras.layers.DepthwiseConv2D):
layer.add_loss(add_l2_regularization_depthwise_kernel(layer, l2_reg))
elif isinstance(layer, tf.keras.layers.Conv2D) or isinstance(layer, tf.keras.layers.Dense):
layer.add_loss(add_l2_regularization_kernel(layer, l2_reg))
添加回答
举报