【问题标题】:How to regularize a layer's kernel weights bias weights in a single regularization function?如何在单个正则化函数中正则化层的内核权重偏差权重?
【发布时间】:2019-06-21 17:21:41
【问题描述】:

Keras documentation 为权重正则化和偏差正则化引入了单独的类。这些可以是添加自定义正则化器的子类。 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))

谢谢,

【问题讨论】:

    标签: keras tensorflow2.0 keras-layer regularized


    【解决方案1】:

    您可以调用layer[idx].trainable_weights,它会返回weightsbias。之后,您可以在模型损失函数中手动添加该正则化损失,如下所示:

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

    【讨论】:

    • 目前在 TF2 中不起作用:TypeError:函数构建代码之外的操作正在传递“图形”张量。通过在函数构建代码中包含 tf.init_scope,可能会使 Graph 张量从函数构建上下文中泄漏。
    • 有可能,我通过在 tf1 上测试发布了这段代码。 tf2 中的替代方案是什么?
    【解决方案2】:

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

    w, b = layer.trainable_weights()
    

    然后你可以通过向model对象添加正则化函数损失项来正则化这一层,如下所示:

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

    当然,您可以为每一层单独执行此操作。

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2018-12-31
      • 2018-07-09
      相关资源
      最近更新 更多