首先,使用您作为示例的代码片段:
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如何评估准确性?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)