跳过正文
  1. Posts/

tensorflow Supervisor 学习笔记

目录

update:supervisor的缺点是遇到问题只会抛异常,所以现在有一个better的管理工具,MonitoredSession

master,chief worker,Supervisor 这几个概念有点搞不清(我最菜.jpg  因此来学习一下。

概述
#

原生的tensorflow 是各种东西都需要自己手动,如果是小规模的训练问题倒是不大,但是如果是训练的数据量比较大,可能需要训练几天或者几个月。。。

那原生的tensorflow的健壮性可能就比较堪忧。。。

万一断电了之类。。。

这时候我们就可以使用supervisor

其主要提供下面三个功能,以增强训练的健壮性:

  * Handles shutdowns and crashes cleanly.
  * Can be resumed after a shutdown or a crash.
  * Can be monitored through TensorBoard.

supervisor可以看做一个工具,或者说是对原生tensorflow的一层封装,目的主要是通过定期save的方法增强训练健壮性,

就算程序挂掉了也可以从上一次save的checkpoint恢复,而不是从头再来(虽然这些也可以手动实现(?)

同时也可以简化代码量

除了supervisor,还有tf.learn库,里面提供对原生tensorflow更高层的封装,也提供更丰富的功能。

实例
#

来举个具体的例子好了:

在不使用supervisor的时候,我们的训练代码如下:

 1variables
 2...
 3ops
 4...
 5summary_op
 6...
 7merge_all_summarie
 8saver
 9init_op
10
11with tf.Session() as sess:
12  writer = tf.tf.train.SummaryWriter()
13  sess.run(init)
14  saver.restore()
15  for ...:
16    train
17    merged_summary = sess.run(merge_all_summarie)
18    writer.add_summary(merged_summary,i)
19  saver.save

如果使用supervisor,代码如下:

 1import tensorflow as tf
 2a = tf.Variable(1)
 3b = tf.Variable(2)
 4c = tf.add(a,b)
 5update = tf.assign(a,c)
 6tf.scalar_summary("a",a)
 7init_op = tf.initialize_all_variables()
 8merged_summary_op = tf.merge_all_summaries()
 9sv = tf.train.Supervisor(logdir="/home/keith/tmp/",init_op=init_op) #logdir用来保存checkpoint和summary
10saver=sv.saver #创建saver
11with sv.managed_session() as sess: #会自动去logdir中去找checkpoint,如果没有的话,自动执行初始化
12    for i in xrange(1000):
13        update_ = sess.run(update)
14        print update_
15        if i % 10 == 0:
16            merged_summary = sess.run(merged_summary_op)
17            sv.summary_computed(sess, merged_summary,global_step=i)
18        if i0 == 0:
19            saver.save(sess,logdir="/home/keith/tmp/",global_step=i)

结论
#

从上面代码可以看出,Supervisor帮助我们处理一些事情 (1)自动去checkpoint加载数据或初始化数据 (2)自身有一个Saver,可以用来保存checkpoint (3)有一个summary_computed用来保存Summary 所以,我们就不需要: (1)手动初始化或从checkpoint中加载数据 (2)不需要创建Saver,使用sv内部的就可以 (3)不需要创建summary writer

参考资料:

tensorflow学习笔记(二十二):Supervisor

Supervisor: Training Helper for Days-Long Trainings.

相关文章

TensorFlow Architecture 学习笔记(二)Adding a New Op

·6 分钟
Adding a New Op # * [目录](https://www.tensorflow.org/extend/adding_an_op#top_of_page) * [定义运算的接口](https://www.tensorflow.org/extend/adding_an_op#define_the_ops_interface) * [实现运算的核心部分(kernels)](https://www.tensorflow.org/extend/adding_an_op#implement_the_kernel_for_the_op) * [多线程cpu kernels](https://www.tensorflow.org/extend/adding_an_op#multi-threaded_cpu_kernels) * [GPU kernels](https://www.tensorflow.org/extend/adding_an_op#gpu_kernels) * [构建运算库](https://www.tensorflow.org/extend/adding_an_op#build_the_op_library) * [用系统编译器编译你的运算(TensorFlow binary installation)](https://www.tensorflow.org/extend/adding_an_op#compile_the_op_using_your_system_compiler_tensorflow_binary_installation) * [使用bazel编译你的运算(TensorFlow source installation)](https://www.tensorflow.org/extend/adding_an_op#compile_the_op_using_bazel_tensorflow_source_installation) * [在 Python 中使用你的运算](https://www.tensorflow.org/extend/adding_an_op#use_the_op_in_python) * [验证你添加的运算可以工作](https://www.tensorflow.org/extend/adding_an_op#verify_that_the_op_works) * [在你的运算中添加高级特性](https://www.tensorflow.org/extend/adding_an_op#building_advanced_features_into_your_op) * [条件检查和验证](https://www.tensorflow.org/extend/adding_an_op#conditional_checks_and_validation) * [Op registration](https://www.tensorflow.org/extend/adding_an_op#op_registration) * [GPU Support](https://www.tensorflow.org/extend/adding_an_op#gpu_support) * [用python 实现梯度](https://www.tensorflow.org/extend/adding_an_op#implement_the_gradient_in_python) * [Shape functions in C++](https://www.tensorflow.org/extend/adding_an_op#shape_functions_in_c) 对于要添加原生tensorflow中没有定义的运算的需求,首先建议在python层面,能不能将需要的op用其他原生的op拼凑起来。