1、Tensorflow 模型文件

  • checkpoint
  • model.ckpt-200.data-00000-of-00001
  • model.ckpt-200.index
  • model.ckpt-200.meta

1.1 meta文件

model.ckpt-200.meta文件保存的是图结构,通俗地讲就是神经网络的网络结构。一般而言网络结构是不会发生改变,所以可以只保存一个就行了。我们可以使用下面的代码只在第一次保存meta文件。

saver.save(sess, 'my-model', global_step=step,write_meta_graph=False)

并且还可以使用tf.train.import_meta_graph(‘model.ckpt-200.meta’)能够导入图结构。

1.2 data文件

model.ckpt-200.data-00000-of-00001为数据文件,保存的是网络的权值,偏置,操作等等。

1.3 index文件

model.ckpt-200.index是一个不可变得字符串表,每一个键都是张量的名称,它的值是一个序列化的BundleEntryProto。 每个BundleEntryProto描述张量的元数据:“数据”文件中的哪个文件包含张量的内容,该文件的偏移量,校验和,一些辅助数据等等。

注意: 以前的版本中tensorflow的model只保存一个文件中。

2 保存和恢复Tensorflow模型

2.1 保存模型

tf.train.Saver 类别提供了保存和恢复模型的方法。tf.train.Saver 构造函数针对图中所有变量或指定列表的变量将 save 和 restore op 添加到图中。Saver 对象提供了运行这些 op 的方法,指定了写入或读取检查点文件的路径。

一般而言,如果不指定任何参数,tf.train.Saver会保存所有的参数。下面是一个简单的例子:

import tensorflow as tf
# Create some variables.
v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer)
v2 = tf.get_variable("v2", shape=[5], initializer = tf.zeros_initializer) inc_v1 = v1.assign(v1+1)
dec_v2 = v2.assign(v2-1) # Add an op to initialize the variables.
init_op = tf.global_variables_initializer() # Add ops to save and restore all the variables.
saver = tf.train.Saver() # Later, launch the model, initialize the variables, do some work, and save the
# variables to disk.
with tf.Session() as sess:
sess.run(init_op)
# Do some work with the model.
inc_v1.op.run()
dec_v2.op.run()
# Save the variables to disk.
save_path = saver.save(sess, "tmp/model.ckpt")
print("Model saved in path: %s" % save_path)

最后会将v1和v2以及op都保存下来。但是如果你只想保存v1和v2,你可以这样写。

tf.train.Saver(V1.values()+V2.values())

2.2 加载模型

模型加载需要利用Saver.restore方法。可以加载固定参数,也可以加在所有参数。

saver.restore(sess,model_path)

2.3 加载模型限制

pre-trained 模型常用来做迁移学习,但是却存在一个限制,那就是网络的前一层必须是一致的,以vgg16为例,如果你利用前面几层提取特征,前面几层的网络必须得和vgg保持一致。而后面的网络参数是随机初始化的。

参考文献

[1] https://blog.csdn.net/gzj_1101/article/details/80299610

1、Tensorflow 之 saver与checkpoint的更多相关文章

  1. Tensorflow系列——Saver的用法

    摘抄自:https://blog.csdn.net/u011500062/article/details/51728830/ 1.实例 import tensorflow as tf import n ...

  2. 由浅入深之Tensorflow(4)----Saver&restore

    x = tf.placeholder(tf.float32) y = tf.placeholder(tf.float32) w = tf.Variable(tf.zeros([1, 1], dtype ...

  3. [Tensorflow] 使用 tf.train.Checkpoint() 保存 / 加载 keras subclassed model

    在 subclassed_model.py 中,通过对 tf.keras.Model 进行子类化,设计了两个自定义模型. import tensorflow as tf tf.enable_eager ...

  4. TensorFlow——Checkpoint为模型添加检查点

    1.检查点 保存模型并不限于在训练模型后,在训练模型之中也需要保存,因为TensorFlow训练模型时难免会出现中断的情况,我们自然希望能够将训练得到的参数保存下来,否则下次又要重新训练. 这种在训练 ...

  5. 解决tensorflow Saver.restore()无效的问题

    解决tensorflow 的 Saver.restore()无法从本地读取变量的问题 最近做tensorflow 手写数字识别的时候遇到了一个问题,Saver的restore()方法无法从本地恢复变量 ...

  6. (转) TensorFlow深度学习,一篇文章就够了

    TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6   原文出处: 我爱计算机 (@tobe迪豪 )    作者: 陈迪 ...

  7. [翻译] Tensorflow模型的保存与恢复

    翻译自:http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/ ...

  8. TensorFlow深度学习,一篇文章就够了

    http://blog.jobbole.com/105602/ 作者: 陈迪豪,就职小米科技,深度学习工程师,TensorFlow代码提交者. TensorFlow深度学习框架 Google不仅是大数 ...

  9. 第二十四节,TensorFlow下slim库函数的使用以及使用VGG网络进行预训练、迁移学习(附代码)

    在介绍这一节之前,需要你对slim模型库有一些基本了解,具体可以参考第二十二节,TensorFlow中的图片分类模型库slim的使用.数据集处理,这一节我们会详细介绍slim模型库下面的一些函数的使用 ...

随机推荐

  1. linux 查看内存,free,ps,说明Buffers,Cached,SReclaimable

    查看机器剩余内存free即可,百度就可以轻松查到,主要想说的 查所有进程占用内存情况并排序: ps aux | sort -nk5 k5代表根据RSS排序,k6代表VSZ排序. ----------- ...

  2. Leetcode84. 柱状图中最大的矩形(单调栈)

    84. 柱状图中最大的矩形 前置 单调栈 做法 连续区间组成的矩形,是看最短的那一块,求出每一块左边第一个小于其高度的位置,右边也同理,此块作为最短限制.需要两次单调栈 单调栈维护递增区间,每次不满足 ...

  3. 2019秋季 关于C语言指针等探索

    C语言指针探索 本篇博客由学生所写,如有错误之处,请在评论区留言 1.输出指针所储存的地址,使指针间接访问所储存地址的内容 #include <stdio.h> int main(void ...

  4. centos下php扩展安装imagemagick

    centos下php扩展安装imagemagick 2015-10-23TONY7PHP 对于php的imagick主要是两部分的安装 ImageMagick主程序地址http://www.image ...

  5. 深度学习面试题18:网中网结构(Network in Network)

    目录 举例 参考资料 网中网结构通过多个分支的运算(卷积或池化),将分支上的运算结果在深度上连接 举例 一个3*3*2的张量, 与3个1*1*2的卷积核分别same卷积,步长=1, 与2个2*2*2的 ...

  6. postgresql 字段sql语句 更改表名

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sq8706/article/detail ...

  7. 树莓派python 控制GPIO

    sudo pip install rpi.gpio #!/usr/bin/env python # encoding: utf-8 import RPi.GPIO as GPIO import tim ...

  8. 优化Unity游戏项目的脚本(上)

    本文将由捷克独立游戏工作室Lonely Vertex的开发工程师Ondřej Kofroň,分享C#脚本的一系列优化方法,并提供改进Unity游戏性能的最佳实践. 在开发游戏时,我们遇到了游戏过程中偶 ...

  9. linux postgresql

  10. 刷新指定窗口页面的gridTable数据

    top.frames[windowName].$("#gridTable").trigger("reloadGrid"); 其中”windowName即是窗口页 ...