zoukankan      html  css  js  c++  java
  • 第18章 检测点模型

    第18章 检测点模型

    在第13章我们讨论了在训练结束后如何保存和序列化模型到磁盘上。在上一章,我们学习了在过拟合和欠拟合发生的时候如何画出它们,使您能够在训练时,在保持显示出希望的模型的同时,杀死性能不佳的实验。

    但是,你可能想我们是否能够将上述策略结合到一起。在损失/正确率提高时能序列化模型吗?或者在训练过程中仅序列化最佳模型是可能的吗?答案是肯定的,幸运的是,这些操作不需要我们写回调函数,这些都内置在keras库中了。

    1         检查神经网络模型的改进

    检查点的一个好的应用是每次在训练中有好的改进时,就序列化到磁盘上。我们定义“改进”要么是损失下降要么是正确率提高,我们将在实际的keras回调函数中设置这些参数。

    具体代码见GitHub的chapter18/。

    在导入类中注意ModelCheckpoint,这个类让我们在模型性能提高的时候检查和序列化网络到磁盘上。构建回调函数如下:

       

    我们在第37-38行定义了保存的检查点文件名,固定值weights-epoch数目-损失值。然后39-40定义检查点模型,参数保存的名字、要监视的变量(这里我们监视验证损失)、mode指明如何监视(由于损失越小越好,因此设为min;如果监视的是正确率,由于越大越好,则要设置为max)、save_best_only参数则表示最新的最佳模型不会被覆盖、最后的verbose参数仅是显示执行过程中的log信息。

    然后在训练模型时,加入callback就可以了:

       

    之后运行模型,等待完成,就可以看到每次验证损失降低时就记录一次模型文件了。

    2         仅检查最佳神经网络

    可能在上面运行中最不好的是每次模型改进就会保存一个模型,最后会有很多改进模型,但是我们可能只想保留最佳模型文件。幸好,可以通过ModelCheckpoint接受一个参数,然后无论什么时候性能改进了,仅仅是覆盖这个文件。我们创建一个cifar10_checkpoint_best.py文件,具体见GitHub的chapter18/下。

    这里仅仅是通过添加一个覆盖文件即可:

     

    其它代码则与训练一个网络的步骤相同,导入模块,加载数据、划分数据、数据float化、向量化标签、初始化模型与优化器。

    这里执行完后,可看到只有一个文件保留,即只保留一个最佳的模型文件。

    作者倾向于后者,这可以保留较少文件,且保留了最佳模型文件。

  • 相关阅读:
    Atom实例
    订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
    XML模式:Dublin Core
    Dublin Core
    海量数据的理想存储方案
    百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite
    用HiveDB横向切分MySQL数据库
    超详细单机版搭建hadoop环境图文解析
    从String.valueOf(null)说起
    js闭包理解
  • 原文地址:https://www.cnblogs.com/paladinzxl/p/9686036.html
Copyright © 2011-2022 走看看