没有简单的方法将 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.scalar
:tf.summary.scalar('acc', acc_op)
;
tf.Graph
中可以有多个tf.summary
,所以我们定义一个merge_summary_op = tf.summary.merge_all()
得到一个op
来合并所有的metricTensor
s。
将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?的主要内容,如果未能解决你的问题,请参考以下文章