没有简单的方法将 Tensorboard 输出添加到预定义的估计器函数 DnnClassifier?

Posted

技术标签:

【中文标题】没有简单的方法将 Tensorboard 输出添加到预定义的估计器函数 DnnClassifier?【英文标题】:No easy way to add Tensorboard output to pre-defined estimator functions DnnClassifier? 【发布时间】:2018-02-14 06:51:33 【问题描述】:

我一直在使用 TF 1.3 中的 estimator 接口,包括创建数据输入函数:

training_input_fn = tf.estimator.inputs.pandas_input_fn(x=training_data, y=training_label, batch_size=64, shuffle=True, num_epochs=None)

并构建神经网络:

dnnclassifier = tf.estimator.DNNClassifier( feature_columns=dnn_features, hidden_units=[1024, 500, 100], n_classes=2, model_dir='./tmp/ccsprop', optimizer=tf.train.ProximalAdagradOptimizer( learning_rate=0.001, l1_regularization_strength=0.01 ))

并执行它

dnnclassifier.train(input_fn=training_input_fn, steps=1500)

经过大量搜索,我发现如果不从头开始重新创建模型并在此处指出 https://www.tensorflow.org/extend/estimators

即便如此,我也找不到任何好的示例来创建一个带有张量板输出的简单 dnnClassifier。有什么指导吗?

我的基本模型工作正常,但需要更仔细地检查它,以便最终使用实验进行调整。没看出来怎么办?

【问题讨论】:

【参考方案1】:

调用DNNClassifier.train时,接受hooks参数,可以创建一个SummarySaverHook添加到hooks中。

更新

在 TensorBoard 中添加指标(例如准确度)时,您应该执行几个步骤:

    定义一个Tensor,计算准确率:acc_op = ...;

    Tensor 添加到tf.summary.scalartf.summary.scalar('acc', acc_op)

    tf.Graph中可以有多个tf.summary,所以我们定义一个merge_summary_op = tf.summary.merge_all()得到一个op来合并所有的metricTensors。

    将merge_summary_op添加到summary_writer = tf.summary.FileWriter()中;

    summary_writer 添加到SummarySaverHook 或通过您自己的代码调用summary_writer

【讨论】:

任何指向示例实现的指针?与文档斗争..试图创建 >TBcall=tf.SummarySaverHook(save_steps=10, output_dir='./tb') get >>AttributeError: module 'tensorflow' has no attribute 'SummarySaverHook' 我得到它采取 TBcall=tf.train.SummarySaverHook(save_steps=10, output_dir='./tb') 但它需要脚手架或 summary_op 之一,我不知道如何参考? (我想得到图表?) 所以,进一步 TBcall=tf.train.SummarySaverHook(save_steps=10, output_dir='./tb', summary_op='accuracy')dnnclassifier.train(input_fn=training_input_fn, steps=1500, hooks=TBcall) 给出错误:'SummarySaverHook' object is not iterable hooks 应该是一个列表,所以 hooks = [TBcall] 但是被调用的对象应该如何构造呢?我收到“Fetch argument 'accuracy' cannot be interpeter as a tensor.. 罐装 DNN 中可以访问哪些参数/函数?(我的最后一条评论是我的尝试。【参考方案2】:

有关 GH 的详细讨论请参见此处:https://github.com/tensorflow/tensorflow/issues/12974#issuecomment-339856673

这可以从罐装模型中获得全套 TB 输出:

dnnclassifier = tf.estimator.DNNClassifier(
  feature_columns=dnn_features,
  hidden_units=[1024, 500, 100],
  n_classes=2, 
  model_dir='./tmp/ccsprop',
  optimizer=tf.train.ProximalAdagradOptimizer(
    learning_rate=0.001,
    l1_regularization_strength=0.01),
  config=tf.estimator.RunConfig().replace(save_summary_steps=10)
)

注意最后一行并注意需要括号的位置!

【讨论】:

以上是关于没有简单的方法将 Tensorboard 输出添加到预定义的估计器函数 DnnClassifier?的主要内容,如果未能解决你的问题,请参考以下文章

Sagemaker 在训练期间未将 Tensorboard 日志输出到 S3

在 Tensorboard 上显示图像(通过 Keras)

Tensorboard - 向数据点添加多个元数据标签

tensorboard 之 TF可视化

Tensorboard 示例未重现 GPU 配置文件

使用 tf.keras.Model.fit 进行训练时如何将自定义摘要添加到 tensorboard