Tensorflow - 使用带有1.2 Estimator API的tf.summary

时间:2017-07-13 16:15:02

标签: python tensorflow

我尝试将一些TensorBoard日志记录添加到使用新tf.estimator API的模型中。

我有一个像这样的钩子设置:

model_fn

在我的summary中,我还创建了def model_fn(features, labels, mode): # ... model stuff, calculate the value of loss tf.summary.scalar("loss", loss) # ... -

summary_hook

但是,当我运行此代码时,我从Exactly one of scaffold or summary_op must be provided.收到以下错误: tf.summary.merge_all()这可能是因为None未找到任何摘要并且正在返回tf.summary.scalar,尽管我在model_fn中声明了 myRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot ds : dataSnapshot.getChildren() ){ String find = ds.child("titles").getValue().toString(); Pattern pattern = Pattern.compile(".*456.*"); Matcher matcher = pattern.matcher(find); adapter.add(matcher.group()); } } @Override public void onCancelled(DatabaseError error) { Log.w(TAG, "Failed to read value.", error.toException()); } });

为什么这不起作用的任何想法?

3 个答案:

答案 0 :(得分:8)

使用tf.train.Scaffold()并传递tf.merge_all,如下所示

summary_hook = tf.train.SummarySaverHook(
    save_secs=2,
    output_dir=MODEL_DIR,
    scaffold=tf.train.Scaffold(summary_op=tf.summary.merge_all()))

答案 1 :(得分:5)

只是对于将来有这个问题的人来说,所选择的解决方案对我不起作用(请参阅我在所选解决方案中的评论)。

实际上,使用TF 1.2 Estimator API,不需要有summary_hook。我只是在model_fn中有tf.summary.scalar("loss", loss),并运行没有summary_hook的代码。记录损失并显示在张量板中。我不确定在此之后是否更改了TF API以及类似的问题。

答案 2 :(得分:1)

使用Tensorflow ver-r1.3

在估算工具model_fn

中添加摘要操作

示例:

tf.summary.histogram(tensorOp.name, tensorOp)

如果您觉得撰写摘要可能会占用时间和空间,您可以在Estimator run_config

中控制摘要的写入频率
run_config = tf.contrib.learn.RunConfig()
run_config = run_config.replace(model_dir=FLAGS.model_dir)
run_config = run_config.replace(save_summary_steps=150)

注意:这会影响TensorBoard记录的整体摘要编写频率,估算值(tf.estimator.Estimator