如何使用tf.train.Scaffold初始化评估的局部变量?

时间:2017-07-12 09:47:59

标签: python tensorflow

我使用高级tf.contrib.learn.Experiment对象来交错训练和评估。但是,我面临着报告为未初始化的评估和度量模块中的局部变量的问题:

Variables not initialized: mean/total, mean/count, eval_step

我向tf.train.Scaffold提供自定义local_init_op,基本上如下所示:

scaffold = tf.train.Scaffold(
  local_init_op=tf.group(
    iterator.initializer,
    tf.tables_initializer(),
    tf.local_variables_initializer()))

(其中iteratortf.contrib.data.Iterator。)

然后存储在tf.estimator.EstimatorSpec中,由tf.estimator.Estimator model_fn函数返回。

由于我不认为tf.local_variables_initializer()懒惰地操作,这意味着尚未创建这些变量。

那么如何初始化它们呢?

1 个答案:

答案 0 :(得分:2)

我找到的唯一解决方案是不使用自定义local_init_op,而是在创建所有变量时依赖Scaffold.finalize中构建的默认值。

要初始化我的iterator,我只需将其添加到TABLE_INITIALIZERS集合中:

tf.add_to_collection(tf.GraphKeys.TABLE_INITIALIZERS, iterator.initializer)