keras是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keras是啥相关的知识,希望对你有一定的参考价值。

参考技术A

Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化 [1]  。

Keras在代码结构上由面向对象方法编写,完全模块化并具有可扩展性,其运行机制和说明文档有将用户体验和使用难度纳入考虑,并试图简化复杂算法的实现难度 [1]  。Keras支持现代人工智能领域的主流算法,包括前馈结构和递归结构的神经网络,也可以通过封装参与构建统计学习模型 [2]  。在硬件和开发环境方面,Keras支持多操作系统下的多GPU并行计算,可以根据后台设置转化为Tensorflow、Microsoft-CNTK等系统下的组件 [3]  。

Keras的主要开发者是谷歌工程师François Chollet,此外其GitHub项目页面包含6名主要维护者和超过800名直接贡献者 [4]  。Keras在其正式版本公开后,除部分预编译模型外,按MIT许可证开放源代码

Keras 中的“指标”是啥?

【中文标题】Keras 中的“指标”是啥?【英文标题】:What is "metrics" in Keras?Keras 中的“指标”是什么? 【发布时间】:2018-04-28 08:44:01 【问题描述】:

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

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

【问题讨论】:

这些答案(免责声明:我的)也可能有用:1)How does Keras evaluate the accuracy? 2)Loss & accuracy - Are these reasonable learning curves? 【参考方案1】:

如keras metrics页面所述:

指标是用于判断您的绩效的函数 型号

指标经常与提前停止回调一起使用,以终止训练并避免过度拟合

【讨论】:

你能提供一个参考来看看它的机制是什么吗?【参考方案2】:

参考:Keras Metrics Documentation

正如keras metrics 的文档页面中所给出的,metric 会判断模型的性能。 compile 方法中的 metrics 参数包含模型在其训练和测试阶段需要评估的指标列表。 指标如下:

binary_accuracy

categorical_accuracy

sparse_categorical_accuracy

top_k_categorical_accuracy

sparse_top_k_categorical_accuracy

是编译模型时在 metrics 参数中提供的可用度量函数。

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

您可以在here找到深入了解指标的一个重要资源

【讨论】:

【参考方案3】:

所以为了了解metrics 是什么,最好先了解loss 函数是什么。神经网络大多使用梯度方法通过递减loss函数的迭代过程进行训练。

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

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

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

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

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

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

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

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

【讨论】:

当您说“跟踪测量”时 - 这是为了让我们可以在训练完成后可视化指标以查看模型训练的速度/流畅程度吗? 关于如何实现或使用批量或训练指标的任何参考资料?【参考方案4】:

从实现的角度来看,损失和指标在 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

【讨论】:

作为对 keras 相关事物的有用答案的补充......“除了上述指标之外,您还可以使用损失函数页面中描述的任何损失函数作为指标。” ...来自keras docs。 @Marcin Możejko 的精彩解释说“损失函数是一个度量”。在 Keras 文档中并没有注意到相同的函数可用于损失和指标,但他们确实在文档底部以较小的字体说明了这一点。【参考方案5】:

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

【讨论】:

以上是关于keras是啥的主要内容,如果未能解决你的问题,请参考以下文章

keras.argmax中axis=-1是啥意思?

Keras 中的“细胞类”是啥?

TensorFlow 和 Keras 中的符号张量是啥?

Keras:循环网络的正确数据格式是啥?

Keras 中 TimeDistributed 层的作用是啥?

Keras 中的“指标”是啥?