首页 > 解决方案 > tf.MonitoredSession 在没有钩子的情况下访问原始会话:run_step_fn vs _tf_sess

问题描述

我正在使用 tf.MonitoredSession,有时您想要评估某些节点但您不想继续训练步骤,因此您不想使用 Hooks 来记录内容。似乎会话被包装了几次,并且原始会话以嵌套方式存储:https ://github.com/tensorflow/tensorflow/issues/8425 但也可以使用方法 _tf_sess() https:// github.com/tensorflow/tensorflow/issues/11971

回顾一下,我认为有两种可能的方法可以在没有钩子的情况下运行:

  1. 使用 step_fn https://www.tensorflow.org/api_docs/python/tf/train/MonitoredSession#run_step_fn
  2. 访问原始会话raw_session = sess._tf_sess()

如果我想摆脱困境,我认为方式 2. 对我来说更直观,但这是正确的做法吗?这样做有一些问题吗?我想知道为什么它是私有的,并且不打算有像 in 那样访问原始会话的方法SingularMonitoredSession.raw_session()https://www.tensorflow.org/api_docs/python/tf/train/SingularMonitoredSession

https://github.com/tensorflow/tensorflow/blob/r1.11/tensorflow/python/training/monitored_session.py的第 1010 行我可以看到 raw_session 被定义为返回 self._tf_sess(),所以我想知道为什么明确选择不让用户访问 MonitoredSession 中的原始会话,使用 sess._tf_sess( )? 我想知道它是否与分布式设置中的某些问题有关。

标签: pythontensorflow

解决方案


推荐阅读