在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. Mysqlfunc.c

    int rc;int db_connection;char *server = "192.168.139.207"; // 数据库的ip地址char *user = "c ...

  2. go 基础 变量和常量

    package main import "fmt" //全局变量,赋值 var( PI float32 = 3.1415 Count ) //全局变量,无值 var( x stri ...

  3. [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 (转)

    http://www.cnblogs.com/lzj0616/p/6440563.html [译]AngularJS 1.3.0 开发者指南(一) -- 介绍 Angular是什么 ? Angular ...

  4. Swift基础知识点的学习

    每一个程序员都有一颗不满足当下知识的学习,学习Swift更是每一个iOS程序员必学技能!!! 一说道基础点的学习,当然涵盖的方面也是很多很多啦....然而每一个小知识点的学习,写一个博客,我也觉得没什 ...

  5. 让mysql返回的结果按照传入的id的顺序排序

    比如id为 1,3,5,44,66,32,21,6 那么返回的结果顺序也是这个顺序   $sql = "select * from ".$this->tableName(). ...

  6. Python 输出时去掉列表元组外面的方括号与圆括号

     

  7. 不容错过的 Babel7 知识

    对 Babel 的配置项的作用不那么了解,是否会影响日常开发呢?老实说,大多情况下没有特别大的影响(毕竟有搜索引擎). 不过呢,还是想更进一步了解下,于是最近认真阅读了 Babel 的文档,外加不断编 ...

  8. python学习之数据类型(int,bool,str)

    第三章 数据类型 3.1 Python基本数据类型 类型 含义 描述 int 整数 主要用来进⾏数学运算 str 字符串 可以保存少量数据并进⾏相应的操作 bool 布尔值 判断真假,True,Fal ...

  9. oracle_协议适配器错误_协议适配器不可加载_TNS监听程序在connect-data中未获得service-name

    最近在使用powerdesigner连接远程oracle进行反向工程操作时,出现了一些问题,这些问题很普遍,大多是由于配置引起的 说明:(1)远程数据库版本问 oracle11g 64bit (2)本 ...

  10. 亚马逊s3存储: aws cli上传工具速度和各文件大小关系探究

    1,背景介绍 公司最近最近统一了存储环境,由ftp文件存储全量转换为ceph存储.有业务组表示以前往ftp文件批量上传30万个文件1.3GB只需要16分钟左右.切换为ceph存储需要1个多小时,也就是 ...