我尝试将一些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());
}
});
。
为什么这不起作用的任何想法?
答案 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)