文档章节

TF Saver 保存/加载训练好模型(网络+参数)的那些事儿

刘小米_思聪
 刘小米_思聪
发布于 2018/01/09 02:25
字数 773
阅读 3992
收藏 2

对于神经网络的读取和存储,TF推荐我们使用:When you want to save and load variables, the graph, and the graph's metadata--basically, when you want to save or restore your model--we recommend using SavedModel 推荐使用savedmodel. SavedModel is a language-neutral, recoverable, hermetic serialization format. SavedModel enables higher-level systems and tools to produce, consume, and transform TensorFlow models. TensorFlow provides several mechanisms for interacting with SavedModel, including tf.saved_model APIs, Estimator APIs and a CLI. 。

一般模式:

  • 训练时候保存
# Create a saver.
saver = tf.train.Saver(...variables...)
# Remember the training_op we want to run by adding it to a collection.
tf.add_to_collection('train_op', train_op)
sess = tf.Session()
for step in xrange(1000000):
    sess.run(train_op)
    if step % 1000 == 0:
        # Saves checkpoint, which by default also exports a meta_graph
        # named 'my-model-global_step.meta'.
        saver.save(sess, 'my-model', global_step=step)

另一个代码加载模型训练好的的网络和参数来测试,或进一步训练

with tf.Session() as sess:
  new_saver = tf.train.import_meta_graph('my-model.meta')
  new_saver.restore(sess,tf.train.latest_checkpoint( './')
  ...
  

模型训练完毕之后,你可能需要在产品上使用它。那么tensorflow model是什么?tensorflow模型主要包含网络的结构的定义或者叫graph和训练好的网络结构里的参数。

因此tensorflow model包含2个文件:

a)Meta graph:

使用protocol buffer来保存整个tensorflow graph.例如所有的variables, operations, collections等等。这个文件使用.meta后缀

b) Checkpoint file:

二进制文件包含所有的weights,biases,gradients和其他variables的值。这个文件使用.ckpt后缀,后来变成有2个文件:

mymodel.data-00000-of-00001
mymodel.index

第一个文件.data文件就是保存训练的variables我们将要使用它。

和这些文件一起,tensorflow还有一个文件叫checkpoint用来简单保存最近一次保存checkpoint文件的记录

 

导入训练好的模型,有两件事必须做:

1)创造网络:最直接的方法是再逐层写一遍与原模型一样的网络结构,但是meta文件已经把原始网络保存起来了,因此可以直接导入为你创建网络。saver=tf.train.import_meta_graph('my_model-1000.meta')

2)加载模型:通过saver恢复网络的参数,saver.restore(sess,tf.train.latest_checkpoint('./'))

 

注意:这个checkpoint文件,在导入训练好模型的时候会有如下问题: 当代码知道你指定了log directory 而且在你之前训练胡时候已经在该log目录下生成了checkpoint 模型,它就会直接从你的log目录下去restore checkpoint 文件,而不是the original TF-Slim checkpoint 模型。这一点很多人会忽视。

error like:

2018-01-07 15:17:30.960482: W tensorflow/core/framework/op_kernel.cc:1192] Not found: Key conduct_encoder/layer9-conv9/E_weights not found in checkpoint

方案:当你改变代码重新训练模型之后,应该删除之前的 log文件。或者你不要有保存log文件的代码。

问题2:当我们保存多个模型在一个目录下面时,checkpoint文件只有一个,默认后来的覆盖最初的checkpoint内容,导致你加载不到自己想要加载的模型,而是加载了最后训练成的模型。

方案:因此如果保存一个训练模型时候,尽量给它一个单另的文件夹,比如

saver(sess, 'First_net/my_model')

 

 

© 著作权归作者所有

刘小米_思聪
粉丝 58
博文 60
码字总数 43955
作品 0
西安
其他
私信 提问
加载中

评论(1)

小-夜-曲
小-夜-曲
mark
[专题2]tensorflow model save and restore 模型的保存和恢复(1)

Tensorflow: how to save/restore a model? PS 马上要锁门了,先把代码 贴出来,. 一、入门 Question: After you train a model in Tensorflow: 1. How do you save the trained model? 2. Ho......

斐波那契的数字
2017/12/11
0
0
TensorFlow人工智能引擎入门教程之六 训练的模型Model 保存 文件 并使用

上面好几章讲的是 其实CNN 训练不仅仅是图片 声音 文字 其他都是可以的,我从头到尾都没说过CNN只能用来训练图像。只是CNN在图像识别上效果非常显著 非常好。所以我就把CNN讲了好几章,后面讲...

zhuyuping
2016/04/19
10.6K
4
tensorflow初探---模型文件保存和加载

tensorflow模型文件可以大致分为两种: 1.通过tensorflow.train.Saver来生成 1)保存 2)加载 2.通过tensorflow.GraphDef 1)保存 2)加载 暂时写这些,未完待续...

迷失烟雾
2016/12/20
368
0
还在用原生Tensorflow吗?试试TF-Slim吧

TF-Slim是tensorflow中用来定义、训练与评估的轻量级库,tf-slim的组件与tf.contrib.learn相似能够将你从复杂的原生tensorflow解放出来。 你需要导入 为什么要用TF-Slim? tf-slim能够将搭建、...

u014296502
2018/05/23
0
0
TensorFlow 使用 slim 模块搭建复杂网络

参考 https://blog.csdn.net/guvcolie/article/details/77686555 https://www.cnblogs.com/zyly/p/9146787.html 引入模块 简化模型搭建 TF-Slim提供了标准接口用于组建神经网络,包括: Laye...

阿豪boy
2018/08/13
6
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot系列:Spring Boot集成Spring Cache

一、关于Spring Cache 缓存在现在的应用中越来越重要, Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术,并支持使...

杨小格子
35分钟前
7
0
二、MySql存储引擎简介(笔记)

MySql体系 先来看一下MySql的架构图: MySql的存储引擎在架构的最下层,提供了各式各样的存储特性,下面介绍几个常用的存储引擎。 MyISAM 官方提供的一个存储引擎,在数据库的系统表和系统生...

XuePeng77
昨天
4
0
聊聊nacos config的deleteConfig

序 本文主要研究一下nacos config的deleteConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@Re......

go4it
昨天
5
0
面试:原来Redis的五种数据类型底层结构是这样的

关注我,可以获取最新知识、经典面试题以及微服务技术分享   在Redis中会涉及很多数据结构,比如SDS,双向链表、字典、压缩列表、整数集合等等。Redis会基于这些数据结构自定义一个对象系统...

ccww_
昨天
8
0
java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部