什么是Keras的“指标”?

时间:2017-11-15 07:56:29

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

目前尚不清楚Connector是什么(如下面的代码所示)。他们究竟在评估什么?为什么我们需要在URIEncoding中定义它们?为什么我们可以在一个模型中拥有多个指标?更重要的是,这背后的机制是什么? 任何科学参考也值得赞赏。

<Connector connectionTimeout="20000"
           port="8080"
           protocol="HTTP/1.1"
           redirectPort="8443"
           URIEncoding="UTF-8" />

5 个答案:

答案 0 :(得分:23)

因此,为了理解metrics是什么,从了解loss函数是什么开始是件好事。神经网络主要通过递减loss函数的迭代过程使用梯度方法进行训练。一个loss它被设计为具有两个关键属性 - 它的价值越小 - 您的模型越适合您的数据,它应该是可区分的。所以 - 知道这一点我们可以完全定义metric是什么:它是一个函数,给出预测值和示例的基本事实值,为您提供模型适合您所拥有数据的标量度量。因此,您可能会看到loss函数是指标,但相反并不总是成立。要了解这些差异,请参阅metrics用法的最常见示例:

  1. 使用非差异函数衡量网络性能:,例如精度不可区分(甚至不连续),因此您无法直接优化您的网络w.r.t.它。但是 - 您可以使用它来选择具有最佳精度的模型。

  2. 当您的最终损失是其中一些损失时,获取不同损失函数的值:我们假设您的损失具有一个正则化项,用于衡量您的权重与{{ 1}}和衡量模型适应性的术语。在这种情况下,您可以使用0来单独跟踪模型的适应度如何随时间变化。

  3. 跟踪您不希望直接优化模型的度量:所以 - 让我们假设您正在解决多维回归问题,而您最关心的问题是{ {1}}但与此同时,您对解决方案的metrics如何及时发生变化感兴趣。然后 - 最好使用mse

  4. 我希望上面提到的解释明确了什么是指标以及为什么可以在一个模型中使用多个指标。现在 - 让我们说一下cosine-distance中使用它们的机制。在培训时有两种计算方法:

    1. 使用编译时定义的metrics :这是您直接询问的内容。在这种情况下,keras为您定义的每个度量定义一个单独的张量,以便在训练时计算它。这通常会使计算更快,但这需要额外的编译成本以及应根据metrics函数定义指标的事实。

    2. 使用keras :您可以使用Callbacks来计算指标。由于每个回调的默认属性为keras.backend,您可以在训练时使用keras.callback或模型参数计算各种指标。此外 - 它不仅可以按时间计算,还可以按批次计算或按训练计算。这需要以较慢的计算和更复杂的逻辑为代价 - 因为您需要自己定义指标。

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

答案 1 :(得分:3)

keras metrics页面中描述:

  

指标是用于判断您的表现的函数   模型

度量标准经常用于提前停止回调以终止训练并避免过度拟合

答案 2 :(得分:2)

参考:Keras Metrics Documentation

keras metrics的文档页面所示,metric判断模型的性能。 metrics方法中的compile参数包含模型在培训和测试阶段需要评估的度量列表。 指标如:

  • binary_accuracy

  • categorical_accuracy

  • sparse_categorical_accuracy

  • top_k_categorical_accuracy

  • sparse_top_k_categorical_accuracy

是编译模型时 metrics 参数中提供的可用指标函数。

指标功能也可以自定义。当需要评估多个指标时,会以dictionarylist的形式传递。

您应该参考深入了解指标的一个重要资源here

答案 3 :(得分:1)

从实现的角度来看,损失和指标实际上是Keras中相同的功能:

Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow.keras as Keras
>>> print(Keras.losses.mean_squared_error == Keras.metrics.mean_squared_error)
True
>>> print(Keras.losses.poisson == Keras.metrics.poisson)
True

答案 4 :(得分:1)

损失有助于找到您的模型可以生成的最佳解决方案。指标实际上告诉我们它有多好。想象一下,我们找到了回归线(具有最小的最小平方误差)。这是一个足够好的解决方案吗?这就是指标将回答的问题(理想情况下,考虑数据的形状和传播!)。