有时候,想要把模型训练中途保存起来,方式由于意外断电等导致训练一半,什么都没了。

参考下面的网友的文章。

https://blog.csdn.net/index20001/article/details/74322198

https://www.cnblogs.com/denny402/p/6940134.html

首先,保存和恢复都需要实例化一个 tf.train.Saver。

saver = tf.train.Saver()

在创建这个Saver对象的时候,有一个参数我们经常会用到,就是 max_to_keep 参数,这个是用来设置保存模型的个数,默认为5,即 max_to_keep=5,保存最近的5个模型。如果你想每训练一代(epoch)就想保存一次模型,则可以将 max_to_keep设置为None或者0,如:

saver=tf.train.Saver(max_to_keep=0)

但是这样做除了多占用硬盘,并没有实际多大的用处,因此不推荐。

当然,如果你只想保存最后一代的模型,则只需要将max_to_keep设置为1即可,即

saver=tf.train.Saver(max_to_keep=1)

然后,在训练循环中,定期调用 saver.save() 方法,向文件夹中写入包含了当前模型中所有可训练变量的 checkpoint 文件。

saver.save(sess, FLAGS.train_dir, global_step=step)

第一个参数sess,这个就不用说了。第二个参数设定保存的路径和名字,第三个参数将训练的次数作为后缀加入到模型名字中。

saver.save(sess, 'my-model', global_step=0) ==>      filename: 'my-model-0'
...
saver.save(sess, 'my-model', global_step=1000) ==> filename: 'my-model-1000'

之后,就可以使用 saver.restore() 方法,重载模型的参数,继续训练或用于测试数据。

saver.restore(sess, FLAGS.train_dir)
一次 saver.save() 后可以在文件夹中看到新增的四个文件,

实际上每调用一次保存操作会创建后3个数据文件并创建一个检查点(checkpoint)文件,简单理解就是权重等参数被保存到 .ckpt.data 文件中,以字典的形式;图和元数据被保存到 .ckpt.meta 文件中,可以被 tf.train.import_meta_graph 加载到当前默认的图。

示例

下面代码是简单的保存和读取模型:(不包括加载图数据)

#用numpy产生数据
x_data = np.linspace(-1,1,300)[:, np.newaxis] #转置
noise = np.random.normal(0,0.05, x_data.shape)
y_data = np.square(x_data)-0.5+noise#输入层
x_ph = tf.placeholder(tf.float32, [None, 1])
y_ph = tf.placeholder(tf.float32, [None, 1])#隐藏层
w1 = tf.Variable(tf.random_normal([1,10]))
b1 = tf.Variable(tf.zeros([1,10])+0.1)
wx_plus_b1 = tf.matmul(x_ph, w1) + b1
hidden = tf.nn.relu(wx_plus_b1)#输出层
w2 = tf.Variable(tf.random_normal([10,1]))
b2 = tf.Variable(tf.zeros([1,1])+0.1)
wx_plus_b2 = tf.matmul(hidden, w2) + b2
y = wx_plus_b2#损失
loss = tf.reduce_mean(tf.reduce_sum(tf.square(y_ph-y),reduction_indices=[1]))
train_op = tf.train.GradientDescentOptimizer(0.1).minimize(loss)#保存模型对象saver
saver = tf.train.Saver()#判断模型保存路径是否存在,不存在就创建
if not os.path.exists('tmp/'):os.mkdir('tmp/')#初始化
with tf.Session() as sess:if os.path.exists('tmp/checkpoint'):         #判断模型是否存在saver.restore(sess, 'tmp/model.ckpt')    #存在就从模型中恢复变量else:init = tf.global_variables_initializer() #不存在就初始化变量sess.run(init)for i in range(1000):_,loss_value = sess.run([train_op,loss], feed_dict={x_ph:x_data, y_ph:y_data})if(i%50==0):save_path = saver.save(sess, 'tmp/model.ckpt')print("迭代次数:%d , 训练损失:%s"%(i, loss_value))

注:

  1. saver 的操作必须在 sess 建立后进行。
  2. model.ckpt 必须存在给定文件夹中,'tmp/model.ckpt' 这里至少要有一层文件夹,否则无法保存。
  3. 恢复模型时同保存时一样,是 ‘tmp/model.ckpt’,和那3个文件名都不一样。

tensorflow之saver相关推荐

  1. 1、Tensorflow 之 saver与checkpoint

    1.Tensorflow 模型文件 checkpoint model.ckpt-200.data-00000-of-00001 model.ckpt-200.index model.ckpt-200. ...

  2. tensorflow中用saver保存模型

      我们在用tensorflow训练模型时,可能需要训练很长很长一段时间,为了方便下次使用,应该将模型保存起来.在sklearn中,我们可以使用pickle模块进行模型保存:而在tensorflow中 ...

  3. TensorFlow的Saver保存类

    一.Saver的介绍 有时可能只需要保存或者加载部分变量. 比如,可能有一个之前训练好的5层神经网络模型,但现在想写一个6层的神经网络,那么可以将之前5层神经网络中的参数直接加载到新的模型,而仅仅将最 ...

  4. Tensorflow使用Saver保存模型PermissionDeniedError (see above for traceback)

    使用tensorflow训练模型时需要保存训练后得到的模型,并在测试时加载模型. Tensorflow中可以使用Saver类进行参数保存. 保存参数是可以选择的,如果不传参就是保存所有参数. weig ...

  5. DL:深度学习框架Pytorch、 Tensorflow各种角度对比

    DL:深度学习框架Pytorch. Tensorflow各种角度对比 目录 先看两个框架实现同样功能的代码 1.Pytorch.Tensorflow代码比较 2.Tensorflow(数据即是代码,代 ...

  6. Tensorflow 获取model中的变量列表,用于模型加载等

    目录 前言 1. 用tensorflow自带的工具 2. 用tensorflow.contrib.slim. 3. 从保存的model中提取var_list 4. 其他 前言 在加载预训练的网络模型时 ...

  7. TensorFlow的常量、变量、常用函数(一)

    TensorFlow常用函数(一) (1)tf.variable_scope('namespace')和tf.name_scope('namespace'):返回一个用于定义创建variable(层) ...

  8. tensorflow学习笔记-bili莫烦

    bilibili莫烦tensorflow视频教程学习笔记 1.初次使用Tensorflow实现一元线性回归 # 屏蔽警告 import os os.environ['TF_CPP_MIN_LOG_LE ...

  9. TensorFlow 机器学习秘籍第二版:6~8

    原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 深度学习 译文集],采用译后编辑(MTPE ...

最新文章

  1. awk 系列:awk 怎么读取标准输入(STDIN)
  2. 第二话 最最最简单的计算机
  3. HDU - 4687 Boke and Tsukkomi(一般图最大匹配-带花图)
  4. python做数据库压力测试_Python 写的一个MongoDB压力测试
  5. Android setColor
  6. 分布式链路追踪 之 Skywalking 设计理念核心原理
  7. shell 命令管理tomcat
  8. mysql中时间不早于今天_MySQL不正确日期时间值早于1980年的日期
  9. 知网上下载硕博论文为PDF格式的方法
  10. 年度盘点和预测:数说汽车互联网市场
  11. epcs1s是epcs1系列的么_fpga的EPCS 配置的2种方法 FPGA下载程序的方法(EPCS)
  12. 禁止电脑屏幕旋转快捷键
  13. OKR测试试卷模板(进阶)
  14. python dict.get 用法
  15. CRX文件转.O文件(.d文件转换成.o文件)
  16. Android双屏异显以及原理分析
  17. RECON-NG V5使用方法
  18. csdn竟然还有这种神器!后悔没有早点知道!超好用的csdn插件,别再犹豫了,赶快入手吧!
  19. Python opencv 在图片上写字
  20. Activity onDestroy方法未能及时执行原因

热门文章

  1. ESX下修改时间和时区
  2. 如何才能快速提高自己的能力?!
  3. 如何快速获知需要的SPS Sql Search语法
  4. python语言的官方网站-web2py
  5. 堆和栈的概念和区别?
  6. 在HTML中标记tel是什么意思,'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用...
  7. c语言中输入大数,如何使用C语言实现输入10个数按从大到小的顺序排序输出
  8. php正则 替换div标签内容,PHP 正则匹配标签内容,根据字符串长度进行替换
  9. python属性管理(1):基础
  10. 回文树 / 自动机模板