【问题标题】:Initialization of tf.contrib.data.Iterator with tf.estimator用 tf.estimator 初始化 tf.contrib.data.Iterator
【发布时间】:2017-08-10 17:52:48
【问题描述】:

如果tf.estimator.Estimator也被使用,应该如何初始化tf.contrib.data.Iterator

其中一个问题是输入图 (tf 图处理输入的部分) 应该在 intput_fn() 中定义 - 因为 tf.estimator 创建单独的图。

这一要求使得访问迭代器init ops 并传递它们to tf.estimator 变得困难(传递操作可以在以钩子形式调用train/evaluate/predict 时完成)。

【问题讨论】:

    标签: tensorflow tensorflow-datasets tensorflow-estimator


    【解决方案1】:

    一种选择是将您的input_fn 包装在另一个函数中,该函数设置一个简单的SessionRunHook init_hook。所有操作都在input_fn 中定义,它与模型的其余部分在同一个图中被调用,但您可以从中将iterator_init_op 设置为init_hook 的属性。

    def get_input_fn(mode="train"):
        init_hook = IteratorInitHook()
    
        def input_fn():
            ...
            iterator = dataset.make_initializable_iterator()
            init_hook.iterator_init_op = iterator.initializer
    
        return input_fn, init_hook
    
    class IteratorInitHook(tf.train.SessionRunHook):
    
        def after_create_session(self, session, coord):
            session.run(self.iterator_init_op)
    

    现在在构造Experiment 时,您可以获得这些输入函数和初始化钩子,它们会在创建训练/评估会话时被调用。它应该与estimator.train 等效。

    train_input_fn, train_init_hook = get_input_fn("train")
    test_input_fn, test_init_hook = get_input_fn("test")
    
    return tf.contrib.learn.Experiment(
        estimator=estimator,
        train_input_fn=train_input_fn,
        eval_input_fn=test_input_fn,
        train_monitors=[train_init_hook],
        eval_hooks=[test_init_hook],
    )
    

    【讨论】:

      【解决方案2】:

      使用SessionManager 作为钩子可以解决同样的问题。

      sm = tf.train.SessionManager(local_init_op=iterator_init_op)
      ...
      estimator = tf.train.Estimator(...)
      estimator.train(input_fn, hooks=[sm], steps=None, max_steps=None)
      

      【讨论】:

      • 问题在于将初始化操作传递给 estimator.train。你不应该在你的钩子代码中访问init_op(因为它应该在 init_fn 中定义。并且 init_fn 之前不能(!)被调用 - 因为 1 个图形要求。我所做的是将 init_op 保存到下面的集合中预设名称,然后在你告诉我的钩子中读取集合。我会考虑更多,扩展你的答案以给出完整的答案。
      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 2014-12-29
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多