优化精度而不是Keras模型中的损失

优化精度而不是Keras模型中的损失,第1张

优化精度而不是Keras模型中的损失

首先,使用您作为示例的代码片段:

model.compile(loss='mean_squared_error', optimizer='sgd', metrics='acc')

实际上是 无效的 (尽管Keras不会产生任何错误或警告),原因很简单:MSE是 回归 问题的有效损失,而 回归
问题的准确性是毫无意义的(仅对 分类
问题有意义,而MSE并非如此)有效的损失函数)。有关详细信息(包括代码示例),请参见以下内容中的答案:当损失为均方误差(MSE)时,哪个函数定义Keras的准确性?; 对于scikit-
learn中类似的情况,请在此线程中查看自己的答案。

继续回答您的一般问题:在 回归 设置中,通常我们不需要单独的性能指标,为此,我们通常只使用损失函数本身,即,您使用的示例的正确代码将简单地是

model.compile(loss='mean_squared_error', optimizer='sgd')

没有任何

metrics
指定。我们当然可以使用
metrics='mse'
,但这是多余的,并不是真正需要的。有时人们使用类似

model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mse','mae'])

即根据MSE损失优化模型,但除MSE之外,还以平均绝对误差(MAE)展示其性能。

现在,您的问题是:

在训练过程中,模型的重点是否应该最大化acc(或最小化1 / acc)而不是最小化MSE?

至少在原则上确实是有效的(保留用于MSE的参考),但仅适用于 分类
问题,在这种情况下,粗略地说,情况如下:我们不能使用庞大的凸优化方法库来直接最大化准确性,因为准确性不是微分函数;因此,我们需要代理可区分函数以用作损失。适用于分类问题的这种损失函数最常见的例子是交叉熵。

毫不奇怪,尽管上下文略有不同,但您的问题会不时出现。例如查看自己的答案

  • 成本函数训练目标与准确性目标
  • 定位特定指标以优化张量流

对于二进制分类的特殊情况下的损失和准确性之间的相互作用,您可能会在以下有用的线程中找到我的答案:

  • 损失和准确性-这些学习曲线是否合理?
  • Keras如何评估准确性?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5668378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存