Keras 在打印验证损失时,会打印总损失值(正则化损失 + 拟合损失)。
我怎样才能分别得到这两个?我特别希望获得正则化损失的价值。
Keras 在打印验证损失时,会打印总损失值(正则化损失 + 拟合损失)。
我怎样才能分别得到这两个?我特别希望获得正则化损失的价值。
如果您只想要整体正则化损失,您可以使用回调函数计算没有正则化的样本上的损失函数,并将其从评估的损失函数中减去。如何编写自己的回调。
假设您有一个 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/ 。