【人工智能笔记】第二十七节 tensorflow 2.0 中保存模型的方式及注意事项

tensorflow保存模型为pb文件的各种方式 *.pb,官方描述如下: GraphDef(.pb)-a protobuf that represents the Tensorflow training and or computation graph. This contains operators, tensors, and variables definitions. FrozenGraphDef - a subclass of Gr... 阅读详情

在 tensorflow2 中,保存模型有多种方法,方法都在tf.keras.models下面:

  1. 保存模型:save_model 或 model.save,读取模型:load_model。这里可保存成 TensorFlow格式 或者 HDF5 文件。
  2. 只保存模型权重:model.save_weights,读取模型权重:model.load_weights。这里同样可以保存成 TensorFlow格式 或者 HDF5 文件。
  3. 从配置读取模型结构:model.from_config(model.get_config())
  4. 从JSON读取模型结构:model_from_json(model.to_json())
  5. 从YAML读取模型结构:model_from_yaml(model.to_yaml())
  6. 使用tf.keras.callbacks.ModelCheckpoint,保存训练过程中的模型或权重。

下面主要介绍save_model 或 model.save、load_model、model.save_weights、model.load_weights 和 tf.keras.callbacks.ModelCheckpoint的定义及用法。


一、save_model 或 model.save 保存模型

model.save(
    filepath, overwrite=True, include_optimizer=True, save_format=None,
    signatures=None, options=None, save_traces=True
)

参数:

  • filepath:权重文件路径,如果是h5文件直接是完整文件路径即可。如果是tensorflow模型,可以是模型名称或"文件夹/模型名称",最好是有文件夹,因为保存时会生成多个文件,包括权重与索引文件。
  • overwrite:是否以静默方式覆盖目标位置上的任何现有文件,或向用户提供手动提示。
  • include_optimizer:如果为True,则将优化器的状态保存在一起。
  • save_format:'tf'或'h5',指示是将模型保存到Tensorflow SavedModel还是HDF5。在TF 2.X中默认为'tf',在TF 1.X中默认为'h5'。
  • signatures:要使用SavedModel保存的签名。仅适用于“ tf”格式。有关详细信息,请参见tf.saved_model.save中的signatures参数。
  • options:(仅适用于SavedModel格式)tf.saved_model.SaveOptions对象,该对象指定用于保存到SavedModel的选项。
  • save_traces:(仅适用于SavedModel格式)启用后,SavedModel将存储每个图层的功能跟踪。可以禁用此功能,以便仅存储每个层的配置。默认为True。禁用此功能将减少序列化时间并减小文件大小,但是需要所有自定义图层/模型都实现get_config()方法。

 二、load_model 加载模型

tf.keras.models.load_model(
    filepath, custom_objects=None, compile=True, options=None
)

参数: 

  • filepath:字符串或pathlib.Path对象、已保存模型的路径 或 已加载模型的h5py.File对象。如果是tensorflow格式,那么需要先用 tf.train.latest_checkpoint 获取最后的模型文件路径。
  • custom_objects:反序列化过程中要考虑的可选字典映射名称(字符串)到自定义类或函数。
  • compile:布尔值,是否在加载后编译模型。
  • options:可选的tf.saved_model.LoadOptions对象,用于指定从SavedModel加载的选项。

三、tf.keras.callbacks.ModelCheckpoint 在训练过程中保存模型

tf.keras.callbacks.ModelCheckpoint(
    filepath, monitor='val_loss', verbose=0, save_best_only=False,
    save_weights_only=False, mode='auto', save_freq='epoch',
    options=None, **kwargs
)

参数:

filepath:模型路径

monitor:根据该字段,结合mode与save_best_only,保存最优模型

verbose:1.显示详细信息

save_best_only:结合mode与monitor字段,只保存最优模型

save_weights_only:只保存权重,调用的是model.save_weights

mode:'auto'、'min'、'max',最优时是按最大还是最小monitor来判断

save_freq:'epoch'或数字,数字代码步数,而不是epoch


完整Demo,包括5种方法的使用:

import os

import tensorflow as tf

# 训练数据
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.mnist.load_data()

train_labels = train_labels[:1000]
test_labels = test_labels[:1000]

train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0

# 定义模型
def create_model():
  model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(512, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10)
  ])

  model.compile(optimizer='adam',
                loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
                metrics=[tf.metrics.SparseCategoricalAccuracy()])

  return model

# 创建模型
model = create_model()

# 显示模型结构
model.summary()

checkpoint_path = "./data/model_save_and_load/ep{epoch:04d}-loss{loss:.3f}-val_loss{val_loss:.3f}-acc{val_sparse_categorical_accuracy:.2f}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

last_model_path = tf.train.latest_checkpoint(checkpoint_dir)
if os.path.exists(last_model_path):
  model.load_weights(last_model_path) # 只加载权重,对应model.save_weights保存的文件
  model = tf.keras.models.load_model(last_model_path) # 加载完整模型,对应model.save保存的文件
  print('加载模型:{}'.format(last_model_path))

# 创建callback,用于保存训练时的模型权重
cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_path,
                                                 save_weights_only=True, # 只保存权重
                                                 save_best_only=True, # 只保存最佳模型
                                                 monitor='val_sparse_categorical_accuracy',
                                                 mode='max',
                                                 verbose=1)

# 训练模型
model.fit(train_images, 
          train_labels,  
          epochs=10,
          validation_data=(test_images, test_labels),
          callbacks=[cp_callback])  # 通过callback保存训练时的模型

# 只保存权重
model.save_weights(os.path.join(checkpoint_dir,'last_weithts.ckpt'))
# 保存完整模型
model.save(os.path.join(checkpoint_dir,'last_model.ckpt'))

这节内容到此结束,感谢关注,欢迎点赞,哈哈哈

tensorflow模型保存(三)——tensorflow1.x版本的savedmodel格式的模型保存与加载 前言:前面的两篇文章已经分别介绍了高层API与低层API关于各种模型的保存,比如在tensorflow2.x中如何保存checkpoint与savedmodel,在tensorflow1.x中如何保存checkpoint,本文着重介绍在tensorflow1.x版本中怎么保存savedmodel。 要想恢复模型并能够正确的加载,最核心的就在于要给模型的输入与输出起一... 阅读详情

相关推荐

TensorFlow2.0模型格式转换为.pb格式

本文主要介绍如何将tensorflow2.0模型转化为.pb格式。

qq_37116150的博客 1万+

同样是保存模型,model.save()和model. save_weights ()有何区别

model.save()保存了模型的图结构和模型的参数,保存模型的后缀是.hdf5。 model. save_weights ()只保存了模型的参数,并没有保存模型的图结构,保存模型的后缀使用.h5。 所以使用save_weights保存的模型比使用save() 保存的模型的大小要小。同时加载模型时的方法也不同。model.save()保存了模型的图结构,直接使用load_model()方法就可加载模型然后做测试,例: from tensorflow.keras.models import load.

AI浩 1万+

详解tensorflow2.0的模型保存方法(一)

前言:tensorflow2.0中有很多种模型保存方法,为了做一个统一的比较,本文做一个归纳总结,加之自己在这上面踩过很多的坑,现在感觉做一个总结实在是有必要。因为tensorflow创建模型的方式很多,包括Sequence、Model、SubClass Model,我们可以保存所有的模型,也可以仅仅保存权重。 本文为系列文章第一篇,介绍各种模型保存方法,后面还会介绍checkpoint以及Sa...

MIss-Y的博客 3万+

keras中model.save和model.save_weights区别

1、保存模型model.save('**.h5') 将整个模型保存下来,以后直接载入模型与训练数据即可开始训练. 不用再定义网络和编译模型.(这种方法已经保存了模型的结构和权重,以及损失函数和优化器) 载入模型代码如下: from keras.models import load_model model.load_model('**.h5') 2、保存模型权重model.save...

qq_32172681的博客 4986

TensorFlow入门(九)使用 tf.train.Saver()保存模型

关于模型保存的一点心得saver = tf.train.Saver(max_to_keep=3)在定义 saver 的时候一般会定义最多保存模型的数量,一般来说,如果模型本身很大,我们需要考虑到硬盘大小。如果你需要在当前训练好的模型的基础上进行 fine-tune,那么尽可能多的保存模型,后继 fine-tune 不一定从最好的 ckpt 进行,因为有可能一下子就过拟合了。但是如果保存太多,硬盘也有

大学之道,在明明德 3万+

关于tensorflow2.0的注意事项以及使用cnn完成Fashion MNIST分类的demo

引言 提到tensorflow2.0,我不知道读者最先想到的是什么,我最先想到的是——”版本“,没错,就是版本,tensorflow2.0相比1.x版本有非常大的变化,加上python是一个版本并不兼容的环境(即使是3.5和3.7,也会有部分不兼容),这给许多初学者和环境搭建以及mnist的cnn测试造成了很多困难,这里我想和大家有一个直观的解释。 tensorflow2.0 开始之前,我必须提前...

碎片 4458

tensorflow保存和恢复模型saver.restore

1.本文只对一些细节点做补充,大体的步骤就不详述了 2.保存模型 ① 首先我使用的是tensorflow-gpu 1.4.0 ② 这个版本生成的ckpt文件是这样的: 其中.meta存放的是网络模型和所有的变量; .index 和.data一起存放变量数据 -0 -500表示checkpoint点 ③ 保存的配置(一定细看代码注释!!!) import tensorflow as tf w1 =...

从此做一个俗人 2万+

AI人工智能领域中TensorFlow的模型融合技巧

模型融合(Model Fusion)是提升机器学习系统性能的强大技术,它通过组合多个模型的预测结果来获得比单一模型更好的性能。在TensorFlow生态系统中,实现高效的模型融合需要考虑框架特性、计算资源限制和部署要求等多方面因素。基础模型平均和投票策略基于特征拼接的模型融合神经网络堆叠和级联知识蒸馏技术多任务学习框架下的模型共享文章首先介绍模型融合的基本概念和理论背景,然后深入探讨各种具体实现技术。每个技术点都配有TensorFlow代码示例和性能分析。

AI大模型应用之禅 848

tensorflow 保存训练loss_tensorflow2.0保存和加载模型 (tensorflow2.0官方教程翻译)

最新版本:https://www.mashangxue123.com/tensorflow/tf2-tutorials-keras-save_and_restore_models.html 英文版本:https://tensorflow.google.cn/alpha/tutorials/keras/save_and_restore_models 翻译建议PR:https://github.com...

weixin_29502425的博客 1012

机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)

废话不多说,先上效果图 整体来看,效果是非常不错的,模型的训练,参照官方代码mnist_deep.py,准确率是高达99.2% 那么,我是怎么实现的呢? 一.读懂卷积神经网络代码(至少得把程序跑通) 首先参照Tensorflow中文社区教程传送门: http://www.tensorfly.cn/tfdoc/tutorials/mnist_pros.html 能在自己的

qq_38269418的博客 7万+

tensorflow2.0初学者的自学笔记(2)

简介 在上一节中,我们学习了基本的tensroflow的操作流程,特别值得注意的是,会话在2.0中被替换成了function。但是值得注意的是,目前我们甚至还不会如何保存和加载已经训练好的模型,因此本次我们主要学习如何保存训练好的模型以及如何加载它。而方法则分为自动保存和手动保存两种。 模型保存的两种基本格式 在tensorflow保存模型的时候,分为两种形式,一种是只保存权重,它的保存形式是.c...

qq_38907879的博客 540

tensorflow 模型保存与加载

http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ 什么是TF模型:在训练一个神经网络模型后,你会保存这个模型未来使用或部署到产品中。所以,什么是TF模型?TF模型基本包含网络设计或图,与训练得到的网络参数和变量。因此,TF模型具有两个主要文件: a)me

spylyt的专栏 1万+

TensorFlow 2.0 保存、读取、绘制模型

1. 直接保存和读取模型 2. 保存和读取模型结构和权重 2.1 保存模型结构和权重 2.2 读取模型结构

herosunly的博客 1万+

tensorflow 训练模型的保存 与 读取已保存的模型进行测试

在实际中,通常需要将经过大量训练的较好模型参数保存起来,在实际应用以训练好的模型进行预测。 TensorFlow中提供了模型保存的模块 tensorflow.train.Saver() 1. 导入tensorflow模块                   import tensorflow as tf 2. 创建模型保存的Saver对象      saver = tf.train.Sa...

Muzi_Water的博客 3180

解决Windows无法卸载补丁的实用方法

无法卸载Windows补丁可能是一个棘手的问题,但通过上述方法,你应该能够找到解决方案。无论是通过控制面板、命令提示符还是手动重置Windows更新组件,都有可能成功卸载问题补丁。如果所有方法都无效,系统还原将是一个值得尝试的备选方案。希望这篇文章能帮助你解决无法卸载补丁的问题。

mmoo_python的博客 1万+

Zemax实战:20×超高清变焦镜头设计全流程解析(从架构到制造)

本文详细解析了使用Zemax软件设计一款20倍变焦比、恒定F2.8光圈8K超高清镜头的全流程。从应对恒定光圈、宽光谱与8K解析力三大挑战的初始架构规划,到构建多重组态模型、分七阶段进行像差优化与公差分析,最终跨越制造鸿沟,为广播级影视与高精度工业检测应用提供了实战指南。

sun99的博客 552

Tensorflow加载预训练模型和保存模型(ckpt文件)以及迁移学习finetuning

转载自:https://blog.csdn.net/huachao1001/article/details/78501928 使用tensorflow过程中,训练结束后我们需要用到模型文件。有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练。这时候我们需要掌握如何操作这些模型数据。看完本文,相信你一定会有收获! 1 Tensorflow模型文件 我们在checkpoint_d...

loveliuzz的博客 10万+

《Java开发及前端最全面试题-Offer直通车》目录

Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

大模型大数据攻城狮的专栏 1179

TensorFlow2.0 Guide官方教程 学习笔记22 -‘Migrate your TensorFlow 1 code to TensorFlow 2‘-part2

本笔记参照TensorFlow Guide官方教程,主要是对‘Accelerator-Use a GPU’教程内容翻译和内容结构编排,原文链接:Migrate your TensorFlow 1 code to TensorFlow 2 目录 一、自动转换脚本 二、顶级(Top-level)行为改变 三、让代码适应2.0版本(make the code 2.0-native) 3.1 替换v1.S...

jackhh1的博客 939

yolov26改进 | 融合改进篇 | 基于 MobileNetV4 和双向特征金字塔网络BiFPN的融合改进(全网独家首发)

本文介绍BiFPN与MobileNetV4融合改进的YOLOv26。许多模块单独使用能够涨点,但直接叠加后可能因功能重复、通道不匹配、尺度冲突而掉点,因此融合前必须理解各模块作用。MobileNetV4利用UIB与Mobile MQA构建轻量主干,提升特征提取能力;BiFPN通过可学习权重完成双向多尺度融合,强化大、中、小目标的信息交互。两者优化Backbone与Neck,功能互补、结构冲突较少。本文提供代码、配置、消融对比及Codex修改思路,MobileNetV4也可替换其他主干,便于组合实验与二次创新

Snu77的博客 242

微信浏览器input[file]拍照点确认后强刷新解决

微信浏览器input强刷新,input h5强刷新,微信浏览器上传图片后刷新,h5表单强刷新,h5调用拍照后返回首页,h5调用拍照后刷新,微信浏览器强制刷新,iOS上微信浏览器input强刷新,iOS上微信浏览器上传图片后强刷新,ios微信浏览器上传图片后页面刷数据,h5在ios浏览器闪频,h5在ios微信打开时强制刷新,ios手机上调用相机后页面刷新,ios手机上调用相机后页面后重置,ios拍照后刷新,ios拍照完页面大刷新

江拥羡橙的博客 1350

Tensorflow学习笔记-模型保存与加载

保存模型时,文件格式有两种,ckpt和pb格式,这两种格式的模型区别是什么呢?首先看一下英文的解释。并且我们的学习中也要养成看英文文档的习惯,其一:老外写的东西通俗易懂,其二,在翻译时,每个人的英文理解不同,原汁原味的道理就没有了。 The .ckpt is the model given by tensorflow which includes all the weights/paramete...

赵凯月的博客 288

【RH850/U2A】:功能安全

功能安全相关

3130
上一篇: 【人工智能笔记】第二十六节 tensorflow 2.0 实现 RepVGG 高效卷积
下一篇: 【人工智能笔记】第二十八节 tensorflow 2.0 实现YoloV3与YoloV4
PPHT-H
博客等级 码龄18年 6254粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPHT-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值