查找正则化损失分量

数据挖掘 喀拉斯 张量流
2022-02-19 10:02:01

Keras 在打印验证损失时,会打印总损失值(正则化损失 + 拟合损失)。

我怎样才能分别得到这两个?我特别希望获得正则化损失的价值。

2个回答

如果您只想要整体正则化损失,您可以使用回调函数计算没有正则化的样本上的损失函数,并将其从评估的损失函数中减去。如何编写自己的回调。

假设您有一个 kernel_regularize=tf.keras.regularizers.l2(1.5) 的层。正则化损失将是 1.5*tf.reduce_sum(W**2),其中 W 是没有偏差的权重。对于 L1 损失,采用绝对值而不是平方值。每层的正则化损失将线性添加到整体损失函数中。

class LossAndErrorPrintingCallback(keras.callbacks.Callback):
    def on_train_batch_end(self, batch, logs=None):
        print("For batch {}, loss is {:7.2f}.".format(batch, logs["loss"]))

    def on_test_batch_end(self, batch, logs=None):
        print("For batch {}, loss is {:7.2f}.".format(batch, logs["loss"]))

    def on_epoch_end(self, epoch, logs=None):
        print(
            "The average loss for epoch {} is {:7.2f} "
            "and mean absolute error is {:7.2f}.".format(
                epoch, logs["loss"], logs["mean_absolute_error"]
            )
        )

默认情况下,大多数损失函数只返回一个标量值。有些还会为您提供“批次中的每个样本损失”值。如果您想要其他损失类别,您可以使用 add_loss() 来添加、计算和跟踪不同层中不同类型的损失。

有关详细信息,请参阅https://keras.io/api/losses/