在Tensorflow中,有两种保存模型的方法:一种是Checkpoint,另一种是Protobuf,也就是PB格式;

一. Checkpoint方法:

   1.保存时使用方法:

tf.train.Saver()

  生成四个文件:

       checkpoint                 检查点文件

  model.ckpt.data-xxx 参数值

   model.ckpt.index   各个参数

   model.ckpt.meta   图的结构

   2.恢复时使用方法:

     saver.restore() :模型文件依赖Tensorflow,只能在其框架下使用,恢复模型之前需要定义下网络结构

saver=tf.train.import_meta_graph('./ckpt/mode..ckpt.meta')  :直接加载网络结构,不需要重新定义网络

二. PB方法:

  1. 保存模型为PB文件(谷歌推荐),具有语言独立性,可独立运行,序列化的格式,任何语言可解析它,允许其他语言和框架读取,训练和迁移;模型变量是固定的,模型大小会大大减少,适合在手机端运行;

  2. 实现创建模型与使用模型的解耦,使得前向推导Inference代码统一;

  3. PB文件表示MetaGraph的protocol buffer格式的文件;

  4. GraphDef 不保存任何Variable信息,不能从graph_def 来构建图并恢复训练. 

一般情况下,PB可直接生成;

当然也可以从checkpoint文件中生成,代码如下:

 output_graph = os.path.join('./checkpoint/','frozen_graph.pb')
input_checkpoint = os.path.join('./checkpoint/','model.ckpt-xxxxx')  #[xxxxxx为训练生成的step号]
saver = tf.train.import_meta_graph(input_checkpoint+'.meta',clear_devices=True)
graph = tf.get_default_graph()
input_graph_def = graph.as_graph_def for op in graph.get_operations():
print("checkpoint2pb",op.name,op.values()) variable_names = [v.name for v in tf.trainable_variables()]
pirnt("trainalbe_variables:",variable_names) output_node_name=['fc2/add'] #fc2/add 上面的列表里需要存在该操作 with tf.Session() as sess:
saver.restore(sess,input_checkpoint) output_graph_def = graph_util.convert_variables_to_constants(sess=sess,
input_graph_def = input_graph_def,
output_node_names = output_node_name) with tf.gfile.GFile(output_graph,"wb") as f:
f.write(output_graph_def.SerializeToString())

   

两种Tensorflow模型保存的方法的更多相关文章

  1. django 两种创建模型实例的方法

    1. 添加一个classmethod from django.db import models class Book(models.Model): title = models.CharField(m ...

  2. TensorFlow模型保存和加载方法

    TensorFlow模型保存和加载方法 模型保存 import tensorflow as tf w1 = tf.Variable(tf.constant(2.0, shape=[1]), name= ...

  3. tensorflow 模型保存与加载 和TensorFlow serving + grpc + docker项目部署

    TensorFlow 模型保存与加载 TensorFlow中总共有两种保存和加载模型的方法.第一种是利用 tf.train.Saver() 来保存,第二种就是利用 SavedModel 来保存模型,接 ...

  4. TensorFlow 模型保存/载入

    我们在上线使用一个算法模型的时候,首先必须将已经训练好的模型保存下来.tensorflow保存模型的方式与sklearn不太一样,sklearn很直接,一个sklearn.externals.jobl ...

  5. Tensorflow模型保存与加载

    在使用Tensorflow时,我们经常要将以训练好的模型保存到本地或者使用别人已训练好的模型,因此,作此笔记记录下来. TensorFlow通过tf.train.Saver类实现神经网络模型的保存和提 ...

  6. TensorFlow模型保存和提取方法

    一.TensorFlow模型保存和提取方法 1. TensorFlow通过tf.train.Saver类实现神经网络模型的保存和提取.tf.train.Saver对象saver的save方法将Tens ...

  7. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  8. 【高并发】两种异步模型与深度解析Future接口

    大家好,我是冰河~~ 本文有点长,但是满满的干货,以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类,希望大家踏下心来,打开你的IDE,跟着文章看源码,相 ...

  9. css的两种盒子模型

    css的两种盒子模型:W3C标准盒子模型.IE盒子模型 两者的相同之处:都包含margin.border.padding.content 两者的不同之处:W3C标准盒子模型的content部分不包含其 ...

随机推荐

  1. Linux性能分析之上下文切换

    而在每个任务运行前,CPU 都需要知道任务从哪里加载.又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器 CPU 寄存器,是 CPU 内置的容量小.但速度极快的内存.而程序 ...

  2. NGUI中UILabel使用url标签的一个bug

    在NGUI里,UILabel控件可以支持一些简单功能的标签,使文本显示更丰富及实现类似超链接的功能.但是在使用的时候发现了NGUI3.5.9版本里存在着一个bug.不过还好修复这个bug也很简单. 在 ...

  3. Mysql(一)、索引研究

    一.索引简介 1. 为什么要使用索引 查询高效 2. 什么样的信息能成为索引 主键,唯一键,普通键等 二.优化你的索引 1. 二叉查找树 二叉查找树,也称二叉搜索树,或二叉排序树.其定义也比较简单,要 ...

  4. Java split(".") 和 split("\\.")

    Java split(".") 和 split("\\.") 问题描述 使用 . 分解 IP 的各个段,并打印,如:192.168.10.123,分解为 192 ...

  5. 30 道linux运维题

    1.linux如何挂在windows下的共享目录mount.cifs //192.168.1.3/server /mnt/server -o user=administrator,pass=12345 ...

  6. 【Lua程序设计第四版练习题答案】ch01 Lua语言入门

    联系1.1: 运行阶乘的示例并观察,如果输入负数,程序会出现什么问题?试着修改代码来解决问题.   -- 定义一个计算阶乘的函数 function fact (n) if n == 0 then re ...

  7. @Value注解

    1.注入 基本字符 public class Student { @Value("qq") private String name; @Value("12") ...

  8. 【DSP开发】【计算机视觉】EMCV:可在DSP上运行的OpenCV

    EMCV:可在DSP上运行的OpenCV EMCV项目主页: http://sf.net/projects/emcv EMCV全称为Embedded Computer Vision Library,是 ...

  9. group_by和having的用法

    #encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum ...

  10. flask的方法视图

    from flask import Flask,views,render_template,request app = Flask(__name__) app.debug = True class L ...