如何在 Tensorflow DNNClassifier 估计器中打印训练进度?

How to print training progress in Tensorflow DNNClassifier estimator?

我想在互联网被封锁的 Kaggle 笔记本环境中使用 tf.estimator.DNNClassifier 训练模型。因此,我无法使用 Tensorboard 来监控进度。因此,我想在标准输出中记录进度(类似于我们在 Keras 模型上调用 fit 方法)但我无法使其工作。

到目前为止我尝试过的是将日志记录级别设置为 INFO 并将 tf.estimator.RunConfig 实例传递给估算器。 RunConfig 有一个默认值为 100 的 log_step_count_steps 属性,这似乎与我要查找的内容有关,但它不起作用。这是部分代码:

import logging;
logging.getLogger().setLevel(logging.INFO)
tf.logging.set_verbosity(tf.logging.INFO)

config = tf.estimator.RunConfig()
classifier = tf.estimator.DNNClassifier(
    feature_columns = feature_columns,
    hidden_units = [128, 64],
    n_classes = 2,
    config = config
)

classifier.train(input_fn=train_input_fn)

我用的是Tensorflow版本1.11.0-rc1

您需要使用替换在 RunConfig 中设置所需的值。

config = tf.estimator.RunConfig().replace(keep_checkpoint_max = 5, 
                    log_step_count_steps=20, save_checkpoints_steps=200)
classifier = tf.estimator.DNNClassifier(
    feature_columns = feature_columns,
    hidden_units = [128, 64],
    n_classes = 2,
    config = config
)

classifier.train(input_fn=train_input_fn)

上面的代码应该每 20 步记录一次损失。

在尝试了很多解决方案后,我终于发现问题中的所有代码都是必要的,例如将日志级别设置为 INFO 并将 RunConfig 对象传递给 DNNClassifier,但是由于Kaggle 内核笔记本中的一个错误,在训练分类器之前,我们首先需要记录任意内容以使 Tensorflow 日志记录在 Kaggle 中工作!例如:

logging.info('I am info')