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化、向量化标签、初始化模型与优化器。

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

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

  • 相关阅读:
    在C#代码中应用Log4Net(二)典型的使用方式
    在C#代码中应用Log4Net(一)简单使用Log4Net
    Windows Azure Active Directory (2) Windows Azure AD基础
    Windows Azure Virtual Network (6) 设置Azure Virtual Machine固定公网IP (Virtual IP Address, VIP) (1)
    Windows Azure Active Directory (1) 前言
    Azure China (6) SAP 应用在华登陆 Windows Azure 公有云
    Microsoft Azure News(3) Azure新的基本实例上线 (Basic Virtual Machine)
    Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
    Microsoft Azure News(1) 新的数据中心Japan East, Japan West and Brazil South
    Windows Azure HandBook (2) Azure China提供的服务
  • 原文地址:https://www.cnblogs.com/paladinzxl/p/9686036.html
Copyright © 2011-2022 走看看