Keras 如何规范化图层';单个正则化函数中的s核权重偏差权重?

Keras 如何规范化图层';单个正则化函数中的s核权重偏差权重?,keras,tensorflow2.0,keras-layer,regularized,Keras,Tensorflow2.0,Keras Layer,Regularized,引入了单独的权重正则化和偏差正则化类。这些可以是添加自定义正则化器的子类。Keras文档中的一个示例: def my_regularizer(x): return 1e-3 * tf.reduce_sum(tf.square(x)) 其中x可以是内核权重或偏差权重。但是,我想用一个函数来规范我的层,该函数包括层权重和层偏移。有没有一种方法可以将这两种功能合并到一个函数中 例如,我希望有一个正则化器: def l1_special_reg(weight_matrix, bias_vect

引入了单独的权重正则化和偏差正则化类。这些可以是添加自定义正则化器的子类。Keras文档中的一个示例:

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))

谢谢,

您可以调用
层[idx]。可训练的权重
,它将同时返回
权重
偏差
。之后,您可以在模型损失函数中手动添加该正则化损失,如下所示:

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>]

在TensorFlow 2中,这可以通过
model.add_loss()
函数实现。假设你有某一层的权重和偏张量:

w, b = layer.trainable_weights()
然后,您可以通过向
模型
对象添加正则化函数和损失项来正则化该层,如下所示:

def l1_special_reg(weight_matrix, bias_vector):
    return 0.01 * K.sum(K.abs(weight_matrix)-K.abs(bias_vector))

model.add_loss(l1_special_reg(w, b))

当然,您可以对每个层独立执行此操作。

目前在TF2中不起作用:TypeError:函数构建代码之外的op被传递一个“图形”张量。通过在函数构建代码中包含tf.init_作用域,可以使图张量从函数构建上下文中泄漏出来。tf2中对此的替代方案是什么?
def l1_special_reg(weight_matrix, bias_vector):
    return 0.01 * K.sum(K.abs(weight_matrix)-K.abs(bias_vector))

model.add_loss(l1_special_reg(w, b))