的 Keras文件 为权重正则化和偏置正则化引入了单独的类。这些类可以作为子类来添加一个自定义的正则化器。这是Keras文档中的一个例子,其中x可以是内核权重,也可以是偏置权重。
def my_regularizer(x):
return 1e-3 * tf.reduce_sum(tf.square(x))
其中x可以是内核权重或偏置权重。然而,我想用一个包括以下内容的函数来正则化我的层。图层权重和图层偏移. 有没有一种方法可以将这两个功能整合到一个函数中?
例如,我希望有一个正则化器。
def l1_special_reg(weight_matrix, bias_vector):
return 0.01 * K.sum(K.abs(weight_matrix)-K.abs(bias_vector))
谢谢你
您可以调用 layer[idx].trainable_weights
,它将同时返回 weights
和 bias
. 之后,你可以在模型损失函数中手动添加该正则化损失,如下所示。
model.layers[-1].trainable_weights
[<tf.Variable 'dense_2/kernel:0' shape=(100, 10) dtype=float32_ref>,
<tf.Variable 'dense_2/bias:0' shape=(10,) dtype=float32_ref>]
完整的例子与损失函数。
# define model
def l1_reg(weight_matrix):
return 0.01 * K.sum(K.abs(weight_matrix))
wts = model.layers[-1].trainable_weights # -1 for last dense layer.
reg_loss = l1_reg(wts[0]) + l1_reg(wts[1])
def custom_loss(reg_loss):
def orig_loss(y_true, y_pred):
return K.categorical_crossentropy(y_true, y_pred) + reg_loss
return orig_loss
model.compile(loss=custom_loss(reg_loss),
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])