Sar*_*ran 5 python hyperparameters tensorflow tensorboard
要在不使用Keras 的情况下记录 hparams ,我正在按照此处的 tf 代码中的建议执行以下操作:
with tf.summary.create_file_writer(model_dir).as_default():
hp_learning_rate = hp.HParam("learning_rate", hp.RealInterval(0.00001, 0.1))
hp_distance_margin = hp.HParam("distance_margin", hp.RealInterval(0.1, 1.0))
hparams_list = [
hp_learning_rate,
hp_distance_margin
]
metrics_to_monitor = [
hp.Metric("metrics_standalone/auc", group="validation"),
hp.Metric("loss", group="train", display_name="training loss"),
]
hp.hparams_config(hparams=hparams_list, metrics=metrics_to_monitor)
hparams = {
hp_learning_rate: params.learning_rate,
hp_distance_margin: params.distance_margin,
}
hp.hparams(hparams)
Run Code Online (Sandbox Code Playgroud)
请注意,params这里是一个字典对象,我将传递给估算器。
然后我像往常一样训练估计器,
config = tf.estimator.RunConfig(model_dir=params.model_dir)
estimator = tf.estimator.Estimator(model_fn, params=params, config=config)
train_spec = tf.estimator.TrainSpec(...)
eval_spec = tf.estimator.EvalSpec(...)
tf.estimator.train_and_evaluate(estimator, train_spec=train_spec, eval_spec=eval_spec)
Run Code Online (Sandbox Code Playgroud)
训练后,当我启动 tensorboard 时,我确实记录了 hparams,但我没有看到任何针对它们记录的指标
我进一步确认它们在scalars页面中显示为具有相同标签名称的训练和验证 ie.和./eval,但是 hparams 页面没有看到那些记录的张量。
如何将 hparams 与估计器一起使用?
我正在使用
tensorboard 2.1.0
tensorflow 2.1.0
tensorflow-estimator 2.1.0
tensorflow-metadata 0.15.2
Run Code Online (Sandbox Code Playgroud)
在 Python 3.7.5
尝试 1:
经过一些谷歌搜索,我看到了一些旧的 tf 代码,它们传递hparams给params了 Estimator 的参数,所以为了确保 tf2 在给定时自己记录这些 hparams,我检查了Estimator文档,它说:
该
params参数包含超参数。model_fn如果model_fn具有名为“params”的参数,则将其传递给 ,并以相同方式传递给输入函数。Estimator只传递参数,它不检查它。因此,的结构params完全取决于开发人员。
所以使用 hparams 作为 params 将没有用。
尝试 2:
我怀疑由于估计器使用tensorflow.python.summary 而不是tf.summaryv2 中的默认值,v1 记录的张量可能无法访问,因此,我也尝试使用
with tensorflow.python.summary.FileWriter(model_dir).as_default()
Run Code Online (Sandbox Code Playgroud)
然而,失败了RuntimeError: tf.summary.FileWriter is not compatible with eager execution. Use tf.contrib.summary instead。
更新:我在禁用急切执行的情况下运行它。现在,即使是 hparam 初始日志记录也没有发生。张量板中没有hparams选项卡,因为它因错误而失败
E0129 13:03:07.656290 21584 hparams_plugin.py:104] HParams error: Can't find an HParams-plugin experiment data in the log directory. Note that it takes some time to scan the log directory; if you just started Tensorboard it could be that we haven't finished scanning it yet. Consider trying again in a few seconds.
Run Code Online (Sandbox Code Playgroud)
有没有办法让张量板读取已经记录的度量张量并将它们与 hparams 链接?
罪魁祸首似乎是
# This doesn't seem to compatible with Estimator API
hp.hparams_config(hparams=hparams_list, metrics=metrics_to_monitor)
Run Code Online (Sandbox Code Playgroud)
只需调用 hparams 即可记录使用 .log 记录的所有指标tf.summary。然后在张量板中,您可以仅过滤您需要的指标,然后比较试验。
with tf.summary.create_file_writer(train_folder).as_default():
# params is a dict which contains
# { 'learning_rate': 0.001, 'distance_margin': 0.5,...}
hp.hparams(hparams=params))
Run Code Online (Sandbox Code Playgroud)