初始化:在创建一个MonitoredSession时,会按顺序执行以下操作:
- 调用[Hooks]列表中每一个Hook的begin()函数
- 通过scaffold.finalize()完成图graph的定义
- 创建会话
- 用Scaffold提供的初始化操作(op)来初始化模型
- 如果给定checkpoint_dir中存在checkpoint文件,则用checkpoint恢复变量
- 启动队列线程
- 调用hook.after_create_session()
Run:当调用run()函数时,按顺序执行以下操作
- 调用hook.before_run()
- 用合并后的fetches 和feed_dict调用TensorFlow的session.run() (这里是真正调用tf.Session().run(fetches ,feed_dict))
- 调用hook.after_run()
- 返回用户需要的session.run()的结果
- 如果发生了AbortedError或者UnavailableError,则在再次执行run()之前恢复或者重新初始化会话
Exit:当调用close()退出时,按顺序执行下列操作
- 调用hook.end()
- 关闭队列线程queuerunners和会话session
-
在monitored_session的上下文中,抑制由于处理完所有输入抛出的OutOf Range错误。
call hook.begin()
sess = tf.Session()
call hooks.after_create_session()
while not stop is requested:
call hooks.before_run()
try:
results = sess.run(merged_fetches, feed_dict=merged_feeds)
except (errors.OutOfRangeError, StopIteration):
break
call hooks.after_run()
call hook.end()
sess.close()