gpt4 book ai didi

python - 在 Keras 模型中优化准确性而不是损失

转载 作者:行者123 更新时间:2023-11-30 08:48:12 25 4
gpt4 key购买 nike

如果我正确理解了损失函数对模型的重要性,它会指导模型基于最小化损失值来进行训练。例如,如果我希望训练我的模型以获得最小的平均绝对误差,我应该使用 MAE 作为损失函数。例如,为什么有时您会看到有人想要尽可能达到最佳精度,但构建模型以最小化另一个完全不同的函数?例如:

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

为什么上面的模型被训练来给我们最好的acc,因为在训练过程中它会尝试最小化另一个函数(MSE)。我知道,经过训练后,模型的度量将为我们提供训练期间找到的最佳 acc。

我的疑问是:模型在训练过程中的重点不应该是最大化 acc (或最小化 1/acc)而不是最小化 MSE 吗?如果以这种方式完成,模型是否会为我们提供更高的准确性,因为它知道在训练过程中必须最大化它?

最佳答案

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

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

实际上是无效(尽管 Keras 不会产生任何错误或警告),原因非常简单:MSE 是回归问题的有效损失,因此问题的准确性是没有意义的(仅对分类问题有意义,其中 MSE 不是有效的损失函数)。有关详细信息(包括代码示例),请参阅 What function defines accuracy in Keras when the loss is mean squared error (MSE)? 中自己的答案;对于 scikit-learn 中的类似情况,请参阅 this thread 中自己的答案.

继续您的一般问题:在回归设置中,通常我们不需要单独的性能指标,并且我们通常仅使用损失函数本身来实现此目的,即正确的代码您使用的示例就是

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

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

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

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

现在,你的问题:

shouldn't the focus of the model during its training to maximize acc (or minimize 1/acc) instead of minimizing MSE?

至少在原则上确实有效(除了对MSE的引用),但仅适用于分类问题,粗略地说,情况如下:我们无法使用庞大的武器库凸优化方法的目的是为了直接最大化精度,因为精度不是一个可微函数;因此,我们需要一个代理可微函数来用作损失。这种适用于分类问题的损失函数最常见的例子是 cross entropy .

毫不奇怪,您的这个问题会时不时地出现,尽管上下文略有不同;例如,请参阅自己的答案

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

关于python - 在 Keras 模型中优化准确性而不是损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com