TensorFlow之模型保存与加载

2023-11-01

模型在训练过程中或者在训练之后,模型的执行过程能被保存,也就是,模型能从暂停中恢复以免训练的时间过长。因此,被保存的模型可以被共享,其他人可以重新构建相同的模型。被保存的模型以如下的两种方式进行共享:

  •  创建模型的代码

  • 被训练模型的权重或者参数

安装类库

如上所示,安装保存模型的类库、工具集,并导入其支持的函数,其中,以HDF5的文件格式保存模型。

加载数据样本

如上所示,加载mnist训练数据集,该数据集是流行服饰的图片数据集,其中,train_images是训练的图片数据集,train_labels是训练的标签数据集,分别使用mnist数据集的前1000条记录。

定义模型

如上所示,定义创建序列模型的函数、创建模型,其中,该模型仅定义一个全连接层、每层512个单元、使用删除正则化机制、使用Adam优化器优化模型。

保存检查点

检查点是用于保证训练过程的可用性,当训练过程被中断,设置检查点可以保存中断之前的训练数据,例如,保存了训练过程的权重或者参数,用户可以从检查点中恢复训练。Keras技术框架提供tf.keras.callbacks.ModelCheckpoint工具类用于保存训练过程的检查点,用户使用检查点可以持续地保存训练过程或者训练结束的训练数据。

检查点回调(callback)

如上所示,以回调的方式创建了一个模型的检查点,其中,checkpoint_path是保存检查点对应的文件路径,cp_callback是创建一个检查点函数,callbacks=[cp_callback]是为模型设置了训练过程中回调检查点函数、持续地保存训练过程中的检查点,该函数是在每次训练迭代结束的时候被回调,训练多次迭代则多次回调。

如上所示,显示训练结束之后,检查点保存路径下的文件信息。

如上所示,先创建一个模型model,在训练之前对模型执行测试评估,显示其准确度只有7%,使用模型的load_weights函数加载之前训练的检查点,创建一个权重都相同的模型,然后执行测试评估,显示其准确度达到86.60%(重用已训练完成的模型,包括权重)。

检查点选项设置

如上所示,用户可以根据实际情况设置检查点的参数选项,例如,checkpoint_path可以设置每次训练迭代保存的检查点的名称,save_freq设置检查点保存的频率,每多少次训练迭代保存一次检查点,日志显示每5次训练迭代记录一次检查点。

如上所示,显示模型检查点保存的文件列表,以及显示最后一个检查点。

如上所示,使用load_weights函数加载模型的最后一次训练的检查点,其包括该次检查点的权重,然后,执行模型的测试评估,其准确度达到87.30%。

检查点文件属性

检查点文件是二进制格式的字节文件,其中保存了训练过程中学习到的权重信息,其描述如下所示:

  • 一个或者多个分片,每个分片都包含了模型训练所得的权重信息

  • 一个索引文件,对以上的分片文件进行索引

在单节点的机器中训练模型,则生成的其中一个分片的检查点文件的后缀是.data-00000-of-00001。

手动保存权重

如上所示,使用模型的save_weights保存模型的权重,load_weights函数是加载已保存的权重,然后,使用测试数据集对模型执行测试评估,其准确度达到87.30%。

保存完整模型

使用keras技术框架的tf.keras.Model.save函数可以保存完整的模型,该保存方式包括模型的架构、模型权重、模型训练的设置,该保存方式可以让用户直接重用已保存的模型,而不用修改模型的代码,也就是,由于优化器的状态能被恢复,用户可以直接恢复模型到上次训练暂停的时候。该保存方式的包括两种格式,SavedModel以及HDF5,其中,SavedModel是默认的保存格式。

SavedModel格式

如上所示,使用模型的save函数保存完整的已训练完成的模型。

如上所示,显示保存模型的文件列表,然后,使用load_model函数加载已保存的模型,输出模型的汇总信息。

如上所示,重新加载了已训练完成、完整的、相同的模型,然后,使用模型进行测试评估、预测。

HDF5格式

如上所示,创建一个模型、对模型执行训练、以HDF5的格式保存完整的模型。

如上所示,重新加载HDF5格式的已经保存的模型,输出模型汇总信息。

如上所示,使用测试数据集对重新加载的模型执行测试评估,其准确度达到85.90%。

由以上的分析可知,Keras技术框架保存模型的信息如下所示:

  •  模型训练所得的权重值

  • 模型的架构

  • 模型的训练设置,例如,传入到模型compile函数的参数

  • 模型的优化器以及优化器的状态

(未完待续)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorFlow之模型保存与加载 的相关文章

随机推荐

  • 单片机项目实训

    把时髦的技术挂在嘴上 不如把过时的技术记在心里 目录 一 单片机项目实训 项目实战 基于NRF905的多点温度无线采集系统 项目实战 基于NRF24L01的多点温湿度无线采集系统 项目实训 篮球计分系统设计 无线nRF905版本 项目实训
  • 鸿蒙珠融入体内,斗罗大陆同人小说排行榜。第一名:《斗罗大陆之超级无敌》:主角...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 斗罗大陆同人小说排行榜 第一名 斗罗大陆之超级无敌 主角玉天龙被鸿蒙紫珠带着穿越到斗罗大陆 遁入柳二龙体内 柳二龙未与他人交合 便生下玉天龙 斗罗大陆之超级无敌 这本书拥有系统 鸿蒙紫珠 召唤技
  • 项目开发中常见问题汇总

    已经在拦截中配置访问静态资源不拦截 但是在访问静态资源时 仍然出现404错误 解决办法 在配置文件中配置 spring mvc static path pattern static spring web resources static l
  • VC6与VISIO2007的冲突

    装了VC6 在 文件 gt 打开 时会出错 以下是查到的解决方法 如果在VC6 0中的 FileView 右键点 add files to folder 或者在Project菜单点Add to project Files都会报devshl
  • element表格实现溢出隐藏单元格增加复制按钮

    此功能可以实现只写一个公共复制按钮 可以在多个页面的表格中使用 项目框架为vue 用到了element ui vuex clipboard 如果不想使用vuex 则需要想办法把复制按钮的位置x y坐标写成公共的变量 1 复制按钮 如果整个项
  • 使用dd命令制作Ubuntu U盘启动盘(使用U盘启动盘安装Ubuntu系统)

    1 查看挂载的U盘的设备名称 sudo fdisk l 2 如果U盘还在挂载状态 卸载它 否则 会提示设备或资源正忙 umount dev u盘名 3 格式化U盘 sudo mkfs ntfs f dev u盘名 4 写入启动引导 sudo
  • Redis面试题(一): Redis到底是多线程还是单线程?

    0 redis单线程问题 单线程指的是网络请求模块使用了一个线程 所以不需考虑并发安全性 即一个线程处理所有网络请求 其他模块仍用了多个线程 1 为什么说redis能够快速执行 1 绝大部分请求是纯粹的内存操作 非常快速 2 采用单线程 避
  • C++泛型编程

    写在前面 0 所谓泛型编程就是独立于任何特定类型的方式编写代码 使用泛型程序时 需要提供具体陈旭实例所操作的类型或者值 我们经常用到STL容器 迭代器 和算法都是泛型编程的例子 模板是C 支持参数化多态的工具 使用模板可以使用户为类或者函数
  • 瑞芯微rockchip PX30触摸屏调试记录

    系列文章目录 瑞芯微rockchip PX30 串口调试记录 瑞芯微rockchip PX30 显示屏调试 瑞芯微rockchip PX30触摸屏调试记录 瑞芯微rockchip PX30 QT环境搭建 瑞芯微rockchip PX30 G
  • 从static变量导出问题解析 __declspec(dllexport) 和 __declspec(dllimport)的作用

    这段时间要把tinyxml从静态库弄成动态库 要用到 declspec dllexport 和 declspec dllimport 来导出dll和lib文件 终于弄明白了export和import的作用 下面从使用的角度来说明一下他们的功
  • 我用ChatGPT写神经网络:一字不改,结果竟很好用

    自从去年底推出以来 对话式 AI 模型 ChatGPT 火遍了整个社区 ChatGPT 的确是一个了不起的工具 就像一个 潘多拉魔盒 一旦找到正确的打开方式 你或许会发现 自己再也离不开它了 作为一个全能选手 人们给 ChatGPT 提出的
  • exe 网页套壳_一日一技

    Matrix 首页推荐 Matrix 是少数派的写作社区 我们主张分享真实的产品体验 有实用价值的经验与思考 我们会不定期挑选 Matrix 最优质的文章 展示来自用户的最真实的体验和观点 文章代表作者个人观点 少数派仅对标题和排版略作修改
  • JS——输入输出语法&数组的操作

    JavaScript输入输出语法 目标 能写出常见的JavaScript输入输出语法 输出语法 语法1 document write 要输出的内容 作用 向body内输出内容 注意 如果输出的内容写的是标签 也会被解析成网页元素 语法2 a
  • C#----对子窗体进行层叠排列

    欢迎大家提出意见 一起讨论 转载请标明是引用于 http blog csdn net chenyujing1234 代码 VS2008 http www rayfile com zh cn files f4235a26 9aa8 11e1
  • python中os库用法详解(总结)

    os库主要是对文件和文件夹进行操作 在Python中对 件和 件夹的操作要借助os模块 的相关功能 具体步骤如下 1 导 os模块 import os 2 使 os 模块相关功能 os 函数名 1 件重命名 os rename 标 件名 新
  • JavaScript(js)

    js 基础语法 1 与html结合使用 内部JS 定义
  • OpenCV学习第十三篇:提取水平和垂直线(去除干扰线)

    1 结构元素 可以是任意形状的结构元素 矩形 圆 直线 磁盘形状 砖石形状等 2 提取步骤 输入图像彩色图像imread 转换为灰度图像cvtColor 转换为二值图像adaptiveThreshold 定义结构元素 开操作 腐蚀 膨胀 提
  • mysql-8.0.17-winx64 安装包 与 安装教程

    初步安装教程 https www cnblogs com cyl048 p 11305642 html 安装时可能需要使用的命令 进入到mysql安装包的bin目录下 cd d D Program Files x86 mysql 8 0 1
  • redis-benchmark

    redis benchmark Redis自带一个叫redis benchmark的工具来模拟N个客户端同时发出M个请求 影响 Redis 性能的因素 有几个因素直接决定 Redis 的性能 它们能够改变基准测试的结果 所以我们必须注意到它
  • TensorFlow之模型保存与加载

    模型在训练过程中或者在训练之后 模型的执行过程能被保存 也就是 模型能从暂停中恢复以免训练的时间过长 因此 被保存的模型可以被共享 其他人可以重新构建相同的模型 被保存的模型以如下的两种方式进行共享 创建模型的代码 被训练模型的权重或者参数