我还不清楚什么是metrics
(如下面的代码所示)。他们到底在评估什么?为什么我们需要在 model
中定义它们?为什么我们可以在一个模型中有多个指标?更重要的是,这一切背后的机制是什么?
也欢迎任何科学引用。
model.compile(loss='mean_squared_error',
optimizer='sgd',
metrics=['mae', 'acc'])
最佳答案
因此,为了了解什么是metrics
,最好先了解什么是loss
函数。神经网络主要使用梯度方法通过减少损失
函数的迭代过程进行训练。
loss
被设计为具有两个关键属性 - 首先,它的值越小,你的模型越适合你的数据,其次,它应该是可微的。因此,知道了这一点,我们就可以完全定义什么是 metric
:它是一个函数,根据示例中的预测值和基本真实值,为您提供模型“适应性”的标量度量,到您拥有的数据。因此,如您所见,loss
函数是一种度量,但反之并不总是成立。为了理解这些差异,让我们看一下最常见的metrics
用法示例:
使用不可微函数衡量网络性能:例如准确性不可微分(甚至不是连续的)所以你不能直接优化你的网络 w.r.t.给它。但是,您可以使用它来选择精度最高的模型。
当您的最终损失是其中几个损失函数的组合时,获取不同损失函数的值:让我们假设您的损失有一个正则化项,它衡量您的权重与
0
,以及衡量模型适合度的术语。在这种情况下,您可以使用metrics
来单独跟踪模型的适应度如何跨时期变化。跟踪您不想直接优化模型的度量:因此 - 假设您正在解决一个多维回归问题,您最关心的是
mse
,但同时您对解决方案的cosine-distance
如何随时间变化感兴趣。那么,最好使用metrics
。
我希望上面的解释清楚地说明了指标的用途,以及为什么可以在一个模型中使用多个指标。那么现在,让我们谈谈它们在 keras
中的使用机制。训练时有两种计算方法:
Using
metrics
defined while compilation:这是你直接问的。在这种情况下,keras
为您定义的每个指标定义一个单独的张量,以便在训练时对其进行计算。这通常会使计算速度更快,但这是以额外编译为代价的,而且指标应该根据keras.backend
函数定义。使用
keras.callback
:很高兴您可以使用Callbacks
为了计算你的指标。由于每个回调都有一个默认属性model
,您可以在训练时使用model.predict
或模型参数计算各种指标。此外,它使得计算它成为可能,不仅是按时代计算,而且是按批处理或按训练计算。这是以计算速度变慢和逻辑更复杂为代价的 - 因为您需要自己定义指标。
Here您可以找到可用指标的列表,以及有关如何定义您自己的指标的示例。
关于python - Keras 中的 "metrics"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302085/