怎样在Python的深度学习库Keras中使用度量

 我来答
匿名用户
2018-01-01
展开全部

这就是Keras

Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

  • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)

  • 支持CNN和RNN,或二者的结合

  • 无缝CPU和GPU切换

  • Keras适用的Python版本是:Python 2.7-3.5

    Keras的设计原则是

  • 用户友好:Keras是为人类而不是天顶星人设计的API。用户的使用体验始终是我们考虑的首要和中心内容。Keras遵循减少认知困难的最佳实践:Keras提供一致而简洁的API, 能够极大减少一般应用下用户的工作量,同时,Keras提供清晰和具有实践意义的bug反馈。

  • 模块性:模型可理解为一个层的序列或数据的运算图,完全可配置的模块可以用最少的代价自由组合在一起。具体而言,网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块,你可以使用它们来构建自己的模型。

  • 易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可。创建新模块的便利性使得Keras更适合于先进的研究工作。

  • 与Python协作:Keras没有单独的模型配置文件类型(作为对比,caffe有),模型由python代码描述,使其更紧凑和更易debug,并提供了扩展的便利性。

  • 关于Keras-cn

    本文档是Keras文档的中文版,包括keras.io的全部内容,以及更多的例子、解释和建议

    现在,keras-cn的版本号将简单的跟随最新的keras release版本

    由于作者水平和研究方向所限,无法对所有模块都非常精通,因此文档中不可避免的会出现各种错误、疏漏和不足之处。如果您在使用过程中有任何意见、建议和疑问,欢迎发送邮件到moyan_work@foxmail.com与我取得联系。

    您对文档的任何贡献,包括文档的翻译、查缺补漏、概念解释、发现和修改问题、贡献示例程序等,均会被记录在致谢,十分感谢您对Keras中文文档的贡献!

    如果你发现本文档缺失了官方文档的部分内容,请积极联系我补充。

    本文档相对于原文档有更多的使用指导和概念澄清,请在使用时关注文档中的Tips,特别的,本文档的额外模块还有:

  • Keras新手指南:我们新提供了“Keras新手指南”的页面,在这里我们对Keras进行了感性介绍,并简单介绍了Keras配置方法、一些小知识与使用陷阱,新手在使用前应该先阅读本部分的文档。

  • Keras资源:在这个页面,我们罗列一些Keras可用的资源,本页面会不定期更新,请注意关注

  • 深度学习与Keras:位于导航栏最下方的该模块翻译了来自Keras作者博客keras.io 和其他Keras相关博客的文章,该栏目的文章提供了对深度学习的理解和大量使用Keras的例子,您也可以向这个栏目投稿。 所有的文章均在醒目位置标志标明来源与作者,本文档对该栏目文章的原文不具有任何处置权。如您仍觉不妥,请联系本人(moyan_work@foxmail.com)删除。

  • 当前版本与更新

    如果你发现本文档提供的信息有误,有两种可能:

  • 你的Keras版本过低:记住Keras是一个发展迅速的深度学习框架,请保持你的Keras与官方最新的release版本相符

  • 我们的中文文档没有及时更新:如果是这种情况,请发邮件给我,我会尽快更新

  • 目前文档的版本号是2.0.8,对应于官方的2.0.8 release 版本, 本次更新的主要内容是……等等,应该是这么长时间都没更新后从2.0.4-2.0.8的内容

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-04-23
展开全部

答案来自AiTechYun:怎样在Python的深度学习库Keras中使用度量

Keras库提供了一种在训练深度学习模型时计算并报告一套标准度量的方法。

除了提供分类和回归问题的标准度量外,Keras还允许在训练深度学习模型时,定义和报告你自定义的度量。如果你想要跟踪在训练过程中更好地捕捉模型技能的性能度量,这一点尤其有用。

在本教程中,你将学到在Keras训练深度学习模型时,如何使用内置度量以及如何定义和使用自己的度量。

完成本教程后,你将知道:

  • Keras度量的工作原理,以及如何在训练模型时使用它们。

  • 如何在Keras中使用回归和分类度量,并提供实例。

  • 如何在Keras中定义和使用你自定义的度量标准,并提供实例。

  • 让我们开始吧。

    教程概述

    本教程分为4部分,分别是:

  • Keras的度量

  • Keras回归度量

  • Keras分类度量

  • Keras自定义度量

  • Keras的度量

    Keras允许你列出在你的模型训练期间监控的度量。

    你可以通过在模型上指定“ metrics ”参数并提供函数名称列表给compile()函数实现这一点。

    例如:

    1    model.compile(..., metrics=['mse'])    

    你列出的特定带的度量可以是Keras函数的名称(如mean_squared_error)或这些函数得字符串别名(如“ mse ”)。

    度量的值在训练数据集上每个周期结束时记录。如果还提供验证数据集,那么也为验证数据集计算度量记录。

    所有度量都以详细输出和从调用fit()函数返回的历史对象中报告。在这两种情况下,度量函数的名称都用作度量值的密匙。在这种情况下对于验证数据集来说度量将“ val_ ”前缀添加到密钥。

    损失函数和明确定义的Keras度量都可以用作训练度量。

    Keras回归度量

    以下是你可以在Keras中使用回归问题的度量列表。

  • 均方误差:mean_squared_error,MSE或mse

  • 平均绝对误差:mean_absolute_error,MAE,mae

  • 平均绝对百分比误差:mean_absolute_percentage_error,MAPE,mape

  • 余弦距离: cosine_proximity, cosine

  • 下面的示例在简单的回归问题上演示了这些4个内置的回归度量。

    01    from numpyimport array    

    02    from keras.modelsimport Sequential    

    03    from keras.layersimport Dense    

    04    from matplotlibimport pyplot    

    05    # prepare sequence    

    06    X= array([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])    

    07    # create model    

    08    model= Sequential()    

    09    model.add(Dense(2, input_dim=1))    

    10    model.add(Dense(1))    

    11    model.compile(loss='mse', optimizer='adam', metrics=['mse','mae','mape','cosine'])    

    12    # train model    

    13    history= model.fit(X, X, epochs=500, batch_size=len(X), verbose=2)    

    14    # plot metrics    

    15    pyplot.plot(history.history['mean_squared_error'])    

    16    pyplot.plot(history.history['mean_absolute_error'])    

    17    pyplot.plot(history.history['mean_absolute_percentage_error'])    

    18    pyplot.plot(history.history['cosine_proximity'])    

    19    pyplot.show()    

    运行实力打印每个周期结束的度量值

    01    ...    

    02    Epoch96/100    

    03    0s - loss:1.0596e-04 - mean_squared_error:1.0596e-04 - mean_absolute_error:0.0088 - mean_absolute_percentage_error:3.5611 - cosine_proximity:-1.0000e+00    

    04    Epoch97/100    

    05    0s - loss:1.0354e-04 - mean_squared_error:1.0354e-04 - mean_absolute_error:0.0087 - mean_absolute_percentage_error:3.5178 - cosine_proximity:-1.0000e+00    

    06    Epoch98/100    

    07    0s - loss:1.0116e-04 - mean_squared_error:1.0116e-04 - mean_absolute_error:0.0086 - mean_absolute_percentage_error:3.4738 - cosine_proximity:-1.0000e+00    

    08    Epoch99/100    

    09    0s - loss:9.8820e-05 - mean_squared_error:9.8820e-05 - mean_absolute_error:0.0085 - mean_absolute_percentage_error:3.4294 - cosine_proximity:-1.0000e+00    

    10    Epoch100/100    

    11    0s - loss:9.6515e-05 - mean_squared_error:9.6515e-05 - mean_absolute_error:0.0084 - mean_absolute_percentage_error:3.3847 - cosine_proximity:-1.0000e+00    

    接着,创建4个度量在训练周期的折线图。

    请注意,度量使用字符串别名值[‘mse’,‘mae’,’‘mape’,‘cos’]指定,并使用扩展函数名称将其作为历史对象的键值引用。

    我们还可以使用扩展名指定度量,如下所示:

    1    model.compile(loss='mse', optimizer='adam', metrics=['mean_squared_error','mean_absolute_error','mean_absolute_percentage_error','cosine_proximity'])    

    或者你也可以使用损失函数作为度量

    例如,您可以使用均方对数误差(mean_squared_logarithmic_error,MSLE或msle)损失函数作为度量,如下所示:

    1    model.compile(loss='mse', optimizer='adam', metrics=['msle'])    

    Keras分类度量

    以下是可以在Keras中使用的关于分类问题的度量列表。

  • 二进制精度:binary_accuracy,

  • 分类准确度:categorical_accuracy, acc

  • 稀疏分类精度:sparse_categorical_accuracy

  • top k分类精度:top_k_categorical_accuracy(需要指定一个k参数)

  • 稀疏Top k分类精度:sparse_top_k_categorical_accuracy(需要指定一个k参数)

  • 精度是指定好的。

    无论你的问题是二进制还是多分类问题,都可以指定“ acc ”度量来报告精度。

    下面是一个内置的精度度量演示的二进制分类问题的示例。

    01    from numpyimport array    

    02    from keras.modelsimport Sequential    

    03    from keras.layersimport Dense    

    04    from matplotlibimport pyplot    

    05    # prepare sequence    

    06    X= array([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])    

    07    y= array([0,0,0,0,0,1,1,1,1,1])    

    08    # create model    

    09    model= Sequential()    

    10    model.add(Dense(2, input_dim=1))    

    11    model.add(Dense(1, activation='sigmoid'))    

    12    model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['acc'])    

    13    # train model    

    14    history= model.fit(X, y, epochs=400, batch_size=len(X), verbose=2)    

    15    # plot metrics    

    16    pyplot.plot(history.history['acc'])    

    17    pyplot.show()    

    运行这个示例,在每个周期结束时记录精度

    01    ...    

    02    Epoch396/400    

    03    0s - loss:0.5934 - acc:0.9000    

    04    Epoch397/400    

    05    0s - loss:0.5932 - acc:0.9000    

    06    Epoch398/400    

    07    0s - loss:0.5930 - acc:0.9000    

    08    Epoch399/400    

    09    0s - loss:0.5927 - acc:0.9000    

    10    Epoch400/400    

    11    0s - loss:0.5925 - acc:0.9000    

    创建一个精度的折线图。

    自定义Keras的度量

    你还可以定义自己的度量并且在为“metrics”参数调用compile()函数时在函数列表中指定函数名。

    我通常喜欢跟踪的度量是RMSE(均方根误差)。

    你可以通过检查现有度量的代码来了解如何编写自定义的度量。

    例如,下面是Keras中mean_squared_error损失函数和度量的代码。

    1    def mean_squared_error(y_true, y_pred):    

    2        return K.mean(K.square(y_pred- y_true), axis=-1)    

    K是Keras使用的后端。

    在该示例、其他的损失函数示例和度量中,这个方法是在后端使用标准数学函数来计算兴趣度量。

    例如,我们可以编写一个自定义度量来计算RMSE,如下所示:

    1    from kerasimport backend    

    2          

    3    def rmse(y_true, y_pred):    

    4        return backend.sqrt(backend.mean(backend.square(y_pred- y_true), axis=-1))    

    你可以看到函数与添加了sqrt()包含结果的代码MSE相同。

    我们可以在我们的回归示例中进行如下测试。请注意,我们只是直接列出了函数名,而不是将其作为Keras的字符串或别名来解决。

    01    from numpyimport array    

    02    from keras.modelsimport Sequential    

    03    from keras.layersimport Dense    

    04    from matplotlibimport pyplot    

    05    from kerasimport backend    

    06          

    07    def rmse(y_true, y_pred):    

    08        return backend.sqrt(backend.mean(backend.square(y_pred- y_true), axis=-1))    

    09          

    10    # prepare sequence    

    11    X= array([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0])    

    12    # create model    

    13    model= Sequential()    

    14    model.add(Dense(2, input_dim=1, activation='relu'))    

    15    model.add(Dense(1))    

    16    model.compile(loss='mse', optimizer='adam', metrics=[rmse])    

    17    # train model    

    18    history= model.fit(X, X, epochs=500, batch_size=len(X), verbose=2)    

    19    # plot metrics    

    20    pyplot.plot(history.history['rmse'])    

    21    pyplot.show()    

    运行示例记录每个训练周期结束时自定义的RMSE度量。


    Epoch 496/500
    0s – loss: 1.2992e-06 – rmse: 9.7909e-04
    Epoch 497/500
    0s – loss: 1.2681e-06 – rmse: 9.6731e-04
    Epoch 498/500
    0s – loss: 1.2377e-06 – rmse: 9.5562e-04
    Epoch 499/500
    0s – loss: 1.2079e-06 – rmse: 9.4403e-04
    Epoch 500/500
    0s – loss: 1.1788e-06 – rmse: 9.3261e-04

    在运行结束时,创建自定义RMSE度量的折线图。

    你自定义度量函数必须对Keras内部数据结构进行操作,这些内部数据结构可能会因使用的后端不同而有所差别(例如,在使用tensorflow时为tensorflow.python.framework.ops.Tensor),而不是直接使用原始yhat值和y值。

    因此,我建议尽可能使用后端数学函数来保持一致性和执行速度。

    拓展阅读

    如果你想学的更多,可以访问以下的资源。

  • Keras度量API文档:https://keras.io/metrics/

  • Keras度量源代码:https://github.com/fchollet/keras/blob/master/keras/metrics.py

  • Keras Loss API文档:https://keras.io/losses/

  • Keras Loss 源代码:https://github.com/fchollet/keras/blob/master/keras/losses.py

  • 总结

    在本教程中,你已经学会如何在训练深度学习模型时使用Keras度量。

    具体来说,你学到了:

  • Keras度量如何原理,以及如何配置模型以在训练期间报告度量。

  • 如何使用Keras内置的分类和回归度量。

  • 如何有效地定义和报告自定义度量,同时训练的深度学习模型。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式