Keras - 损失和度量的计算方式不同?
Posted
技术标签:
【中文标题】Keras - 损失和度量的计算方式不同?【英文标题】:Keras - Loss and Metric calculated differently? 【发布时间】:2018-07-21 00:47:42 【问题描述】:我在 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
【问题讨论】:
我们无法猜测您的代码是什么样的。 :-) 这是一个普遍的问题,与模型无关。但是,我会发布一些代码。如果这还不够,请要求更多!谢谢:) 已更新,包含代码。 【参考方案1】:请记住 - 如果您使用任何类型的正则化 - 它会影响您的 loss
。您的实际损失等于:
loss = mse + regularization
这就是你的差异的来源。
【讨论】:
【参考方案2】:马辛是对的。 Here我探索了正则化和分批的效果。两者都会影响日志中记录的训练损失,但正则化的影响最大。始终建议在拟合模型后使用 model.evaluate 计算指标。 如果想在训练期间看到“实际”损失,一个技巧是将验证集设置为与训练集(或训练集的子集,如果数据太多)相同。与训练损失不同,验证指标只是在拟合模型上进行评估。
【讨论】:
以上是关于Keras - 损失和度量的计算方式不同?的主要内容,如果未能解决你的问题,请参考以下文章
当度量为 SparseTopKCategoricalAccuracy/TopKCategoricalAccuracy 时,在 Keras 中使用啥损失函数?