python - Keras 中的 "metrics"是什么?

标签 python machine-learning neural-network deep-learning keras

我还不清楚什么是metrics(如下面的代码所示)。他们到底在评估什么?为什么我们需要在 model 中定义它们?为什么我们可以在一个模型中有多个指标?更重要的是,这一切背后的机制是什么? 也欢迎任何科学引用。

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

最佳答案

因此,为了了解什么是metrics,最好先了解什么是loss 函数。神经网络主要使用梯度方法通过减少损失函数的迭代过程进行训练。

loss 被设计为具有两个关键属性 - 首先,它的值越小,你的模型越适合你的数据,其次,它应该是可微的。因此,知道了这一点,我们就可以完全定义什么是 metric:它是一个函数,根据示例中的预测值和基本真实值,为您提供模型“适应性”的标量度量,到您拥有的数据。因此,如您所见,loss 函数是一种度量,但反之并不总是成立。为了理解这些差异,让我们看一下最常见的metrics 用法示例:

  1. 使用不可微函数衡量网络性能:例如准确性不可微分(甚至不是连续的)所以你不能直接优化你的网络 w.r.t.给它。但是,您可以使用它来选择精度最高的模型。

  2. 当您的最终损失是其中几个损失函数的组合时,获取不同损失函数的值:让我们假设您的损失有一个正则化项,它衡量您的权重与 0,以及衡量模型适合度的术语。在这种情况下,您可以使用 metrics 来单独跟踪模型的适应度如何跨时期变化。

  3. 跟踪您不想直接优化模型的度量:因此 - 假设您正在解决一个多维回归问题,您最关心的是 mse,但同时您对解决方案的 cosine-distance 如何随时间变化感兴趣。那么,最好使用metrics

我希望上面的解释清楚地说明了指标的用途,以及为什么可以在一个模型中使用多个指标。那么现在,让我们谈谈它们在 keras 中的使用机制。训练时有两种计算方法:

  1. Using metrics defined while compilation:这是你直接问的。在这种情况下,keras 为您定义的每个指标定义一个单独的张量,以便在训练时对其进行计算。这通常会使计算速度更快,但这是以额外编译为代价的,而且指标应该根据 keras.backend 函数定义。

  2. 使用 keras.callback:很高兴您可以使用 Callbacks为了计算你的指标。由于每个回调都有一个默认属性 model,您可以在训练时使用 model.predict 或模型参数计算各种指标。此外,它使得计算它成为可能,不仅是按时代计算,而且是按批处理或按训练计算。这是以计算速度变慢和逻辑更复杂为代价的 - 因为您需要自己定义指标。

Here您可以找到可用指标的列表,以及有关如何定义您自己的指标的示例。

关于python - Keras 中的 "metrics"是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47302085/

相关文章:

python - 返回 Unicode 字符串与返回编码为 UTF-8 的普通字符串?

Python - 全局数组

python - 预期 conv2d_7 具有形状 (4, 268, 1),但得到的数组具有形状 (1, 270, 480)

python - 如何继续openai API响应不完整

python - tf.keras 损失变为 NaN

python - 如何禁用 Django Celery 管理模块?

python - 根据其他数据框中的列设置数据框中的值

python - tensorflow /keras : "logits and labels must have the same first dimension" How to squeeze logits or expand labels?

machine-learning - Tensorflow 多 GPU MNIST 分类器 : low accuracy

c# - 神经网络 OCR - 需要参数帮助 - Coursera Ng 的示例