【问题标题】:How can I write a custom metric only for the regularisation losses?如何仅为正则化损失编写自定义指标?
【发布时间】:2020-04-25 18:23:22
【问题描述】:

有些层有正则化损失。我想要一个只跟踪正则化损失的“指标”,这样我就可以(从总损失中)在进度栏中单独看到正则化损失在训练期间是如何演变的。此外,鉴于指标保存在历史对象中(由fit 返回),我可以在训练结束时轻松绘制并保存(到文件)正则化损失。

如何仅为正则化损失编写自定义指标?

我知道我可以有一个回调来迭代模型的层并对正则化损失求和(参见例如https://stackoverflow.com/a/48489090/3924118),但我想要一个度量(而不是回调),因为度量将被保存在历史对象中。

最终,我希望正则化损失出现在历史对象中并显示在进度条中(与总损失分开),即使没有实现自定义指标,但我不知道是否有这样的选项在tf.keras。另外,如果我可以有两个选择,那就太好了:1. 查看所有层的所有正则化损失的总和;2. 分别查看每一层的正则化损失。

【问题讨论】:

  • 如何在模型中添加正则化?使用层的kernel_regularizer 参数,还是在自定义层/模型中使用add_loss 方法?
  • @today 在我的具体情况下,我使用来自 TFP 的 DenseFlipout。他们将损失添加到 lossesadd_loss 的字段中,但我认为这没有任何区别。
  • 我明白了。这是您不使用回调的唯一原因:“因为指标将保存在历史对象中。”?换句话说,如果它存储在历史对象中,你可以接受它,无论是度量还是回调,对吧?
  • @today 嗯,是的,如果能够访问历史对象的正则化损失,那就太好了。现在,我正在尝试这样做:stackoverflow.com/a/48489090/3924118,但如果我可以将正则化添加到历史记录中,我的代码将更加统一(因为我已经在训练结束时通过访问来绘制其他损失的演变历史对象)。

标签: tensorflow keras tensorflow2.0 tf.keras


【解决方案1】:

要在进度条中获取它,您可以something like this

def get_reg_loss(reg_layers):
    def reg_loss_term(y_true, y_pred):
        return tf.add_n([r.losses[0] for r in reg_layers])

    return reg_loss_term

model.compile(..., metrics=[..., get_reg_loss(reg_layers)])

这会将所有正则化损失项的总和作为指标添加到模型中。这种方法的缺点是,当您希望进度条显示各个层的损失项时,您必须为每个正则化层定义一个唯一命名的函数。

【讨论】:

    【解决方案2】:

    我想我找到了解决办法。您可以在回调中修改参数logs 以添加您想要的信息。然后您的历史对象将自动包含这些新信息。

    def get_cb(model):
        def on_epoch_end(epoch, logs):
            # Iterate the layers of your model to get the regularisation losses
            reg_losses = get_your_regularisation_losses(model)
            logs["reg_losses"] = reg_losses
    
        return tf.keras.callbacks.LambdaCallback(on_epoch_end=on_epoch_end)
    
    ...
    history = model.fit(..., callbacks=[get_cb(model)])
    do_something(history) # history contains "reg_losses"
    

    (随时提供利用自定义指标的替代解决方案!)

    【讨论】:

      猜你喜欢
      • 2022-11-07
      • 2021-10-08
      • 2021-03-22
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多