Tensorflow Learning1 模型的保存和恢复
CKPT->pb
tensorflow的模型保存有两种形式:
1. ckpt:可以恢复图和变量,继续做训练
2. pb : 将图序列化,变量成为固定的值,,只可以做inference;不能继续训练
Demo
1 def freeze_graph(input_checkpoint,output_graph):
2
3 '''
4 :param input_checkpoint:
5 :param output_graph: PB模型保存路径
6 :return
7 void
8 '''
9
10 # checkpoint = tf.train.get_checkpoint_state(model_folder) #检查目录下ckpt文件状态是否可用
11 # input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路径
12
13 # 指定输出的节点名称,该节点名称必须是原模型中存在的节点
14 output_node_names = "InceptionV3/Logits/SpatialSqueeze" # 如果是多个输出节点,使用 ‘,’号隔开
15
16 ############################ Step1: 从ckpt中恢复图: #############################################
17 saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
18 graph = tf.get_default_graph() # 获得默认的图, 可以省略
19 input_graph_def = graph.as_graph_def() # 返回一个序列化的图代表当前的图,可以省略
20
21 with tf.Session() as sess: # 会使用默认的图 作为当前的图
22 saver.restore(sess, input_checkpoint) #恢复图并得到数据
23
24 ######################## Step2: 创建持久化对象,指定sess,图、以及输出的序列化节点信息 ##############
25 output_graph_def = graph_util.convert_variables_to_constants( # 模型持久化,将变量值固定
26 sess=sess,
27 input_graph_def=input_graph_def,# 等于:sess.graph_def
28 output_node_names=output_node_names.split(","))# 如果有多个输出节点,以逗号隔开
29 ######################### Step3: 模型持久化 #######################################################
30 with tf.gfile.GFile(output_graph, "wb") as f: #保存模型
31 f.write(output_graph_def.SerializeToString()) #序列化输出
32 print("%d ops in the final graph." % len(output_graph_def.node)) #得到当前图有几个操作节点
33 # for op in graph.get_operations():
34
35 # print(op.name, op.values())
36
37
38 ########################### 调用方式 ################################
39 # 输入ckpt模型路径
40 input_checkpoint='models/model.ckpt-10000'
41 # 输出pb模型的路径
42 out_pb_path="models/pb/frozen_model.pb"
43 # 调用freeze_graph将ckpt转为pb
44 freeze_graph(input_checkpoint,out_pb_path)解析函数freeze_graph中,最重要的就是要确定“指定输出的节点名称”,这个节点名称必须是原模型中存在的节点,对于freeze操作,我们需要定义输出结点的名字。freeze的时候就只把输出该结点所需要的子图都固化下来,其他无关的就舍弃掉。因为我们freeze模型的目的是接下来做预测。所以,output_node_names一般是网络模型最后一层输出的节点名称,或者说就是我们预测的目标。在保存pb的时候,通过convert_variables_to_constants函数来指定需要固化的节点名称; tensor name 和 node name 的区别node name 是 图 的节点,里面包含了很多操作和tensortensor 是 node 里面的一个组成部分;以input 为例,“input:0”是张量的名称,而"input"表示的是节点的名称PS:注意张量的名称,即为:节点名称+“:”+“id号”,如"input:0"
Tensorflow Learning1 模型的保存和恢复的更多相关文章
- TensorFlow笔记-模型的保存,恢复,实现线性回归
模型的保存 tf.train.Saver(var_list=None,max_to_keep=5) •var_list:指定将要保存和还原的变量.它可以作为一个 dict或一个列表传递. •max_t ...
- 第六节,TensorFlow编程基础案例-保存和恢复模型(中)
在我们使用TensorFlow的时候,有时候需要训练一个比较复杂的网络,比如后面的AlexNet,ResNet,GoogleNet等等,由于训练这些网络花费的时间比较长,因此我们需要保存模型的参数. ...
- tensorflow模型的保存与恢复
1.tensorflow中模型的保存 创建tf.train.saver,使用saver进行保存: saver = tf.train.Saver() saver.save(sess, './traine ...
- [翻译] Tensorflow模型的保存与恢复
翻译自:http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ ...
- tensorflow 1.0 学习:模型的保存与恢复(Saver)
将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...
- tensorflow 1.0 学习:模型的保存与恢复
将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...
- AI - TensorFlow - 示例05:保存和恢复模型
保存和恢复模型(Save and restore models) 官网示例:https://www.tensorflow.org/tutorials/keras/save_and_restore_mo ...
- tensorflow模型的保存与恢复,以及ckpt到pb的转化
转自 https://www.cnblogs.com/zerotoinfinity/p/10242849.html 一.模型的保存 使用tensorflow训练模型的过程中,需要适时对模型进行保存,以 ...
- Python之TensorFlow的模型训练保存与加载-3
一.TensorFlow的模型保存和加载,使我们在训练和使用时的一种常用方式.我们把训练好的模型通过二次加载训练,或者独立加载模型训练.这基本上都是比较常用的方式. 二.模型的保存与加载类型有2种 1 ...
随机推荐
- oracle partition 分区
--范围分区create table person( id int, name varchar2(20), birth date, sex char(2))partition by range (bi ...
- 【NOIP2016提高组day2】愤怒的小鸟
分析 Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于 (0, 0) 处,每次Kiana可以用它向第一象限发射一只红色的小鸟, 小鸟们的飞行轨迹均 ...
- 【NOIP2016提高A组模拟10.15】打膈膜
题目 分析 贪心, 先将怪物按生命值从小到大排序(显然按这个顺序打是最优的) 枚举可以发对少次群体攻击, 首先将所有的群体攻击发出去, 然后一个一个怪物打,当当前怪物生命值大于2,如果还有魔法值就放重 ...
- vue使用 router-link 时点击不能跳转问题
本来一直都是使用<router-link to='/CouplePackage'>产品</router-link>这样的静态方法, 但是突然今天发现这个方法好像有点问题,在某些 ...
- BZOJ 4289: PA2012 Tax Dijkstra + 查分
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- Elastic-Job快速入门
1 Elastic-Job快速入门1.1 环境搭建1.1.1.版本要求JDK要求1.7及以上版本Maven要求3.0.4及以上版本zookeeper要求采用3.4.6及以上版本1.1.2.Zookee ...
- Python模块之-OS模块
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- 更好的构建 Node 服务的工具
更好的构建 Node 服务的工具 无论前端项目在打包后都发送给后台, 有时候自己想看看效果在运行 npm run build 后只是看到一个 build 文件夹,但是直接打开是无法浏览,因此需要开启一 ...
- 拦截器中,request中getReader()和getInputStream()只能调用一次,构建可重复读取inputStream的request.
由于 request中getReader()和getInputStream()只能调用一次 在项目中,可能会出现需要针对接口参数进行校验等问题. 因此,针对这问题,给出一下解决方案 实现方法:先将Re ...
- [design pattern](4) SImple Factory
前言 本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是创建型模式的一员,也是我们平时coding用到的比较多的一个模式了. 思考题 首先,让我们思考以下的需求: 博主,突然很 ...