第13章保存和加载你的模型

13保存和加载你的模型

在上一章,我们使用keras库学习了怎样训练CNNs。但是,我们注意到,在我们每次想评估网络或测试一批图像时,都需要首先训练它。这在网络模型很深、数据集很大时,将花费巨大时间来训练。那么有没有一种方式在训练完模型后,将它保存在磁盘上,然后在分类新图像时仅仅从磁盘加载就可以?

这种保存和加载一个已训练模型的过程称为模型序列化(model serialization),即本章主要的主题。

1         将一个模型序列化到磁盘上

使用keras库,模型序列化通过对已训练模型调用model.save即可,要加载它通过load_model函数即可。

我们首先以文件shallownet_save.py开始训练部分,见github的chapter12/。

训练过程和测试过程都和之前的程序一样,这里以训练Animals数据集为例。要保存序列化,只需要在model.fit()之后,我们就可以保存权重和优化状态了,通过model.save(args[“model”])即可。序列化后的格式为hdf5格式。

执行python shallownet_save.py –dataset ../datasets/animals –-model shallownet_weights.hdf5

2         从磁盘加载一个已训练的模型

作为模型序列化的一个实际应用,我们演示怎样从Animals数据集中分类单张图片,之后显示分类的图片到屏幕上。

通过shallownet_load.py文件加入该示例代码,见github下chapter12/的文件。加载权重模型使用from keras.models import load_model执行,该函数负责接收已训练网络的路径,解码HDF5中的权重和优化器,并且将权重设置到我们的架构中,让我们可以(1)继续训练或(2)使用这个网络分类新图像。

我们从animals数据集中随机抽取10张图片用于分类:

之后,对每一张图片进行预处理。

按照文件,python shallownet_load.py –dataset ../datasets/animals/ --model shallownet_weight.hdf5将显示分类结果。注意我们该网络参数的分类正确率为70%左右,即可能会显示分类错误的情况。我们将继续在后续章节中继续应用深度学习在计算机视觉分类任务中,也将学习更多方法来提升分类正确率。

3         总结

在第18章,我们将讨论如何在每一epoch后将模型权重保存,我们可以检查网络选择最佳性能的那个模型权重。这种停止训练、调整参数、再重新训练的过程将在Practitioner Bundle和ImageNet Bundle中介绍。

原文地址:https://www.cnblogs.com/paladinzxl/p/9686005.html

时间: 2024-12-11 21:01:15

第13章保存和加载你的模型的相关文章

一步一步写算法(之排序二叉树的保存和加载)

原文:一步一步写算法(之排序二叉树的保存和加载) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 排序二叉树是我们开发中经常使用到的一种数据结构,它具有较好的插入.删除.查找特性.但是由于二叉树的指针较多,所以相比较其他的数据结构而言,二叉树来得比较麻烦些.但是也不是没有办法,下面介绍一下我个人常用的方法. 我们知道,如果一个二叉树是一个满树的话,那么二叉树的节点应该是按照1.2.3.4依次排开的.但是现实情况是这样的,由于排序二叉树自身

C++从零实现深度神经网络之五——模型的保存和加载以及画出实时输出曲线

本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/53704085 微博:http://weibo.com/xingchenbing  一.模型的保存和加载 在我们完成对神经网络的训练之后,一般要把模型保存起来.不然每次使用模型之前都需要先训练模型,对于data hungry的神经网络来说,视数据多寡和精度要求高低,训练一次的时间从几分钟到数百个小时不等,这是任何人都耗不起的.把

公开课视频-《第13章 部署-Citrix-负载均衡器-NetScaler VPX 10.5》(全部完结!!!)

***************************************************************************************** <大企业云桌面部署实战>-培训班-即将开课,包学包会,欢迎咨询:3313395633(QQ) ***************************************************************************************** <大企业云桌面部署实战>-精讲课

[Telerik]RadDocking第02篇 保存和加载RadDocking的布局

一.演示概述 此演示展示了如何通过RadDocking控件自身所提供的SaveLayout()保存布局信息,以及通过LoadLayout()方法来加载布局信息.如此一来,就可以将用户自定义的布局信息持久化保存到文件中,当用户再次打开应用时,可将布局完好如初的恢复显示. 相关下载(屏幕录像):http://pan.baidu.com/s/1gd6DwDt 在线播放:http://v.youku.com/v_show/id_XODcyNjE0Mjg4.html 温馨提示:如果屏幕录像和代码不能正常下

tensorflow教程:变量创建、初始化、保存和加载

变量保存到文件 import tensorflow as tf import numpy as np # Create two variables. x_data = np.float32([1,2,3,4,5,6,7,8,9,0]) weights = tf.Variable(tf.random_normal([10, 1], stddev=0.35), name="weights") biases = tf.Variable(tf.zeros([1]), name="bi

IOS之文件夹创建、删除,图片在本地的保存和加载

本文转自http://blog.csdn.net/toddmi/article/details/8204102 [html] view plaincopy = (NSCachesDirectory, NSUserDomainMask, YES); = [cachePaths objectAtIndex:0]; } [html] view plaincopy = (NSCachesDirectory, NSUserDomainMask, YES); = [cachePaths objectAtIn

第十三章——表和索引分区(2)——使用拆分删除和加载大数据

原文:第十三章--表和索引分区(2)--使用拆分删除和加载大数据 前言: 很多时候需要对大数据量进行归档或者删除,并周期性加载大数据量到一个大表中,现在来做个简单的例子,你经常需要删除大数据量表中的大量数据.同时,你想加载大量数据到这个表中,当表中数据有数十亿时,这个操作可能消耗几个小时,但是如果你的表有分区,那么执行起来会很有效. 本文将模拟删除一个季度的数据,并加载整个季度到现有表,其中使用了拆分(splitting).合并(merging)和切换分区(switching). 假设我们需要存

Android 文件的存储和加载

Android 文件的存储和加载,主要用于请求网络中json文件的缓存,引入了一个简单的过期时间,供大家参考学习! 文件存储 1 private void saveLocal(String json, int index) { 2 3 BufferedWriter bw = null; 4 try { 5 File dir=FileUtils.getCacheDir(); 6 //在第一行写一个过期时间 7 File file = new File(dir, getKey()+"_"

浏览器渲染页面和加载页面机制

为什么有些网站打开的时候会加载会很慢,而且是整个页面同时显示的,而有些网站是从顶到下逐步显示出来的?要搞懂这个可以先从下面这个常规流程开始: 1. 浏览器下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 2. 在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相关联的元素都已经下载完). 3. 如果遇到语义解释性的标签嵌入文件(JS脚本,CSS样式),那么此时IE的下载过程会启用单独连接进行下载. 4. 并且在下载后进行解析,解析过程中,停止页面所有往下