1 回答

TA貢獻1816條經驗 獲得超6個贊
根據(jù)文檔,事實證明,lambda 函數(shù)不應該帶有任何參數(shù)。然而,當我沒有傳遞參數(shù)時,它導致了另一個非常奇怪的錯誤(這是關于Dense
沒有 的層depthwise_kernel
,這是顯而易見的,不應該發(fā)生,但不知何故它發(fā)生了)。
因此,我的最終解決方案是定義兩個單獨的正則化函數(shù),如上面鏈接中的建議。
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))
添加回答
舉報