【发布时间】:2020-04-25 18:23:22
【问题描述】:
有些层有正则化损失。我想要一个只跟踪正则化损失的“指标”,这样我就可以(从总损失中)在进度栏中单独看到正则化损失在训练期间是如何演变的。此外,鉴于指标保存在历史对象中(由fit 返回),我可以在训练结束时轻松绘制并保存(到文件)正则化损失。
如何仅为正则化损失编写自定义指标?
我知道我可以有一个回调来迭代模型的层并对正则化损失求和(参见例如https://stackoverflow.com/a/48489090/3924118),但我想要一个度量(而不是回调),因为度量将被保存在历史对象中。
最终,我希望正则化损失出现在历史对象中并显示在进度条中(与总损失分开),即使没有实现自定义指标,但我不知道是否有这样的选项在tf.keras。另外,如果我可以有两个选择,那就太好了:1. 查看所有层的所有正则化损失的总和;2. 分别查看每一层的正则化损失。
【问题讨论】:
-
如何在模型中添加正则化?使用层的
kernel_regularizer参数,还是在自定义层/模型中使用add_loss方法? -
@today 在我的具体情况下,我使用来自 TFP 的
DenseFlipout。他们将损失添加到losses和add_loss的字段中,但我认为这没有任何区别。 -
我明白了。这是您不使用回调的唯一原因:“因为指标将保存在历史对象中。”?换句话说,如果它存储在历史对象中,你可以接受它,无论是度量还是回调,对吧?
-
@today 嗯,是的,如果能够访问历史对象的正则化损失,那就太好了。现在,我正在尝试这样做:stackoverflow.com/a/48489090/3924118,但如果我可以将正则化添加到历史记录中,我的代码将更加统一(因为我已经在训练结束时通过访问来绘制其他损失的演变历史对象)。
标签: tensorflow keras tensorflow2.0 tf.keras