Keras - Loss 和 Metric 的计算方式不同?
Keras - Loss and Metric calculated differently?
我在 Keras 中有一个模型,我正在优化均方误差。但是,如果我在指标中使用与 Keras losses.py
中相同的代码,我会得到不同的结果。这是为什么?
作为指标:
def MSE_metric(y_true, y_pred):
return K.mean(K.square(y_pred, y_true))
对于模型:
model.compile(optimizer=SGD(lr=0.01, momntum=0.9), loss='MSE', metrics=[MSE_metric])
这导致损失 6.07,但 MSE_metric 为 0.47
请记住 - 如果您使用任何类型的正则化 - 它会影响您的 loss
。您的实际损失等于:
loss = mse + regularization
这就是你的差异的来源。
Marcin 是对的。 Here 我探索了正则化和分成批次的效果。两者都会影响记录在日志中的训练损失,但正则化的影响最大。始终建议在拟合模型后使用 model.evaluate 计算指标。
如果想在训练期间看到 'actual' 损失,一个技巧是将验证集设置为与训练集相同(如果数据太多,则设置为训练集的子集)。与训练损失不同,验证指标只是在拟合模型上进行评估。
我在 Keras 中有一个模型,我正在优化均方误差。但是,如果我在指标中使用与 Keras losses.py
中相同的代码,我会得到不同的结果。这是为什么?
作为指标:
def MSE_metric(y_true, y_pred):
return K.mean(K.square(y_pred, y_true))
对于模型:
model.compile(optimizer=SGD(lr=0.01, momntum=0.9), loss='MSE', metrics=[MSE_metric])
这导致损失 6.07,但 MSE_metric 为 0.47
请记住 - 如果您使用任何类型的正则化 - 它会影响您的 loss
。您的实际损失等于:
loss = mse + regularization
这就是你的差异的来源。
Marcin 是对的。 Here 我探索了正则化和分成批次的效果。两者都会影响记录在日志中的训练损失,但正则化的影响最大。始终建议在拟合模型后使用 model.evaluate 计算指标。 如果想在训练期间看到 'actual' 损失,一个技巧是将验证集设置为与训练集相同(如果数据太多,则设置为训练集的子集)。与训练损失不同,验证指标只是在拟合模型上进行评估。