如果我正确地了解了损失函数对模型的重要性,它会基于最小化损失值来指导模型进行训练。因此,例如,如果我希望对模型进行训练以使平均绝对误差最小,则应使用MAE作为损失函数。例如,为什么有时您看到有人想要获得最佳的准确性,却建立模型以最小化另一个完全不同的功能,为什么呢?例如:
model.compile(loss='mean_squared_error', optimizer='sgd', metrics='acc')
如何训练上面的模型以给我们提供最好的acc,因为在训练过程中它将尝试最小化另一个功能(MSE)。我知道,经过培训后,模型的指标将为我们提供培训期间发现的最佳acc。
我的疑问是:模型训练期间的重点是否应该最大化acc(或最小化1 / acc)而不是最小化MSE?如果采用这种方式,模型是否不会为我们提供更高的准确性,因为它知道必须在训练过程中将其最大化?
答案 0 :(得分:0)
首先,以您作为示例的代码段为例:
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
。我们当然可以使用metrics='mse'
,但这是多余的,并不是真正需要的。有时人们会使用类似的
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['mse','mae'])
即根据MSE损失优化模型,但除MSE之外,还显示其在平均绝对误差(MAE)中的性能。
现在,您的问题:
模型训练过程中的重点不是应该最大化acc(或最小化1 / acc),而不是最小化MSE吗?
至少在原则上确实有效(保留用于MSE的参考),但仅用于分类问题,在这种情况下,大致来说,情况如下:我们无法使用庞大的军械库凸优化方法是为了直接使精度最大化,因为精度不是微分函数;因此,我们需要代理可区分函数以用作损失。这种适合分类问题的损失函数最常见的例子是cross entropy。
不出所料,这个问题会时不时地出现,尽管情况略有不同。例如查看自己的答案
对于在二进制分类的特殊情况下损失和准确性之间的相互作用,您可能会在以下有用的线程中找到我的答案:
答案 1 :(得分:0)
精度无与伦比。因此它不能是损失函数。它只能用作指标。
答案 2 :(得分:-1)
如果我理解正确,您的问题是:为什么我们可以优化“准确性”时优化“损失”。
当然可以! (对于融合是否有益是另一个问题)。您会发现,损失(在您的情况下为MSE)和准确性本质上都是常用函数,或者是精确的方程式,您可以选择任何方程式作为objective function。
也许是由于使用了诸如“ mse”之类的东西,甚至更令人困惑:"acc"
。
检查this文件以更清楚地了解编写"mse"
时的情况
"acc"
有点困惑。您会看到,当您编写“ acc”时,它对Keras具有多种含义。因此,根据您使用的损失函数,Keras会为您确定最佳的“ acc”函数。检查this文件,查看编写"acc"
最后,回答您的问题:shouldn't the focus of the model during it's training to maximize acc (or minimize 1/acc) instead of minimizing MSE?
对喀拉拉邦来说,MSE
和acc
只是函数。 Keras会根据以下函数定义的反馈优化模型:
model.compile(loss=<function_to_take_feedback_from>, optimizer=<also_another_function>, metrics=<function_to_just_evaluate_and_print_result_hoping_this_printed_value_means_something_to_you_the_user>)
attribute: loss
的传递一个函数。如果您不想这样做,只需编写"mse"
,keras就会为您传递所需的功能。
attribute: metrics
的传递功能列表。如果您像我一样懒惰,那么可以简单地要求keras通过写"acc"
您应该使用哪个函数/方程式作为目标函数?
那是另一天:)