修改 tf.estimator.Estimator 如何为 Tensorboard 创建摘要

Posted

技术标签:

【中文标题】修改 tf.estimator.Estimator 如何为 Tensorboard 创建摘要【英文标题】:Modify how a tf.estimator.Estimator creates summaries for Tensorboard 【发布时间】:2018-12-21 16:08:20 【问题描述】:

我正在尝试找出如何修改自定义 TensorFlow 估算器为 Tensorboard 创建事件文件的方式。目前,我的印象是,默认情况下,在我的模型中每 100 步创建一个摘要(包含我使用 tf.summary.scalar(...) 跟踪的所有事物的值(通常是准确性))目录。 tensorboard 稍后使用的事件文件的名称如下所示 events.out.tfevents.1531418661.nameofmycomputer。

我在网上找到了一个例程来改变这种行为,并为每次运行创建带有计算日期和时间的目录,但它使用 TensorFlow 基本 API:

logdir = "tensorboard/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + "/"
writer = tf.summary.FileWriter(logdir, sess.graph)

是否可以使用 TF 自定义估算器做类似的事情?

【问题讨论】:

【参考方案1】:

可以使用tf.estimator.Estimatorevaluate 方法的name 参数为每​​次评估运行指定一个目录,例如:

estimator = tf.estimator.Estimator(
    model_fn=model_fn,
    model_dir=model_dir
)
eval_results = estimator.evaluate(
            input_fn=eval_input_fn,
            name=eval_name
            )

此次评估的事件文件将保存在model_dir 内名为"eval_" + eval_name 的目录中。

【讨论】:

【参考方案2】:

TensorFlow 估算器不需要摘要编写器。调用tf.Estimator.fit()方法时,使用tf.Estimator函数的model_dir属性将模型的汇总日志写入指定文件夹位置。

在下面的示例中,选择存储训练日志的目录是'./my_model'

tf.estimator.DNNClassifier(
    model_fn,
    model_dir='./my_model',
    config=None,
    params=None,
    warm_start_from=None
)

通过从终端运行 tensorboard --logdir=./my_model 来启动 TensorBoard。

【讨论】:

感谢您的回答,但是如果我想多次使用同一个 Estimator 对象并将我的摘要日志每次都存储在不同的文件夹中(名称中包含运行的日期和时间)怎么办? )? 我想只是更改 Estimator 属性 model_dir 的目录位置,然后从该目录运行 tensorboard。 我认为model_dir属性在初始化后是固定的。在训练了我的估计器(称为分类器)后,我尝试了classifier.model_dir = "New_dir",但它失败了。我得到“AttributeError:无法设置属性” 没有。不能这样称呼,要运行新模型,不过这次,只需更改model_dir中的目录位置即可。 但我不想运行新模型。我希望每次都将同一模型的结果(对于 Tensorboard)保存在不同的文件夹中。但是图和检查点和 graph.pbtxt 应该总是在同一个。 TF 基本 API 可以做到这一点,但我不知道如何在 Estimator API 级别做到这一点。

以上是关于修改 tf.estimator.Estimator 如何为 Tensorboard 创建摘要的主要内容,如果未能解决你的问题,请参考以下文章

tf.estimator.Estimator类的用法

tf.estimator.Estimator

如何从检查点使用 tf.estimator.Estimator 进行预测?

如何在SummarySaverHook和Estimator中使用tensorflow.metrics.x?

Tensorflow在Python中导出和重用Estimator对象

mysql中修改列名