1. 程式人生 > >tensorflow學習筆記(二十二):Supervisor

tensorflow學習筆記(二十二):Supervisor

如何使用Supervisor

在不使用Supervisor的時候,我們的程式碼經常是這麼組織的

variables
...
ops
...
summary_op
...
merge_all_summarie
saver
init_op

with tf.Session() as sess:
  writer = tf.tf.train.SummaryWriter()
  sess.run(init)
  saver.restore()
  for ...:
    train
    merged_summary = sess.run(merge_all_summarie)
    writer.add_summary(merged_summary,i)
  saver.save

下面介紹如何用Supervisor來改寫上面程式

import tensorflow as tf
a = tf.Variable(1)
b = tf.Variable(2)
c = tf.add(a,b)
update = tf.assign(a,c)
tf.scalar_summary("a",a)
init_op = tf.initialize_all_variables()
merged_summary_op = tf.merge_all_summaries()
sv = tf.train.Supervisor(logdir="/home/keith/tmp/",init_op=init_op) #logdir用來儲存checkpoint和summary
saver=sv.saver #建立saver with sv.managed_session() as sess: #會自動去logdir中去找checkpoint,如果沒有的話,自動執行初始化 for i in xrange(1000): update_ = sess.run(update) print update_ if i % 10 == 0: merged_summary = sess.run(merged_summary_op) sv.summary_computed(sess, merged_summary,global_step=i) if
i%100 == 0: 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