我使用高级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()))
(其中iterator
是tf.contrib.data.Iterator
。)
然后存储在tf.estimator.EstimatorSpec
中,由tf.estimator.Estimator
model_fn
函数返回。
由于我不认为tf.local_variables_initializer()
懒惰地操作,这意味着尚未创建这些变量。
那么如何初始化它们呢?
答案 0 :(得分:2)
我找到的唯一解决方案是不使用自定义local_init_op
,而是在创建所有变量时依赖Scaffold.finalize
中构建的默认值。
要初始化我的iterator
,我只需将其添加到TABLE_INITIALIZERS
集合中:
tf.add_to_collection(tf.GraphKeys.TABLE_INITIALIZERS, iterator.initializer)