带有tf.keras(tensorflow 2.0)的Hparams插件

带有tf.keras(tensorflow 2.0)的Hparams插件,tensorflow,tensorflow2.0,Tensorflow,Tensorflow2.0,我尝试按照和设置超参数日志中的示例进行操作。它还提到,如果您使用tf.keras,则只需使用回调hp.KerasCallback(logdir,hparams)。然而,如果我使用回调,我不会得到我的指标(只有结果) 我设法做到了,但不完全确定这个神奇的词是什么。这里是我的流程,以防有帮助 callbacks.append(hp.KerasCallback(log_dir, hparams)) HP_NUM_LATENT = hp.HParam('num_latent_dim', hp.Disc

我尝试按照和设置超参数日志中的示例进行操作。它还提到,如果您使用
tf.keras
,则只需使用回调
hp.KerasCallback(logdir,hparams)
。然而,如果我使用回调,我不会得到我的指标(只有结果)

我设法做到了,但不完全确定这个神奇的词是什么。这里是我的流程,以防有帮助

callbacks.append(hp.KerasCallback(log_dir, hparams))

HP_NUM_LATENT = hp.HParam('num_latent_dim', hp.Discrete([2, 5, 100])) 
hparams = {
   HP_NUM_LATENT: num_latent,
}

model = create_simple_model(latent_dim=hparams[HP_NUM_LATENT])  # returns compiled model
model.fit(x, y, validation_data=validation_data, 
          epochs=4,
          verbose=2,
          callbacks=callbacks) 

诀窍是使用TensorBoard保存其验证日志的路径定义Hparams配置

因此,如果您的TensorBoard回调设置为:

log_dir = 'path/to/training-logs'
tensorboard_cb = TensorBoard(log_dir=log_dir)
然后,您应该像这样设置Hparams:

hparams_dir = os.path.join(log_dir, 'validation')

with tf.summary.create_file_writer(hparams_dir).as_default():
    hp.hparams_config(
        hparams=HPARAMS,
        metrics=[hp.Metric('epoch_accuracy')]  # metric saved by tensorboard_cb
    )

hparams_cb = hp.KerasCallback(
    writer=hparams_dir,
    hparams=HPARAMS
)

我只想补充前面的答案。如果您在Colab上的笔记本中使用TensorBoard,那么问题可能不是源于代码,而是源于如何在Colab上运行TensorBoard。解决办法是杀死现有的张力板,然后再次发射

如果我错了,请纠正我

示例代码:

从tensorboard.plugins.hparams导入api作为hp
HP_LR=HP.HParam('learning_rate',HP.Discrete([1e-4,5e-4,1e-3]))
HPARAMS=[HP\u LR]
#在我的示例中,这个指标似乎没有任何影响
#hp使用历元精度和历元损耗进行培训和验证。
度量=[hp.Metric('epoch\u accurity',group=“validation”,display\u name='val\u accurity')]
#保存配置
log_dir='/content/logs/hparam_tuning'
使用tf.summary.create_file_writer(log_dir).as_default():
hp.hparams\u config(hparams=hparams,metrics=metrics)
def fitness_func(hparams,seed):
rng=随机。随机(种子)
#在这里,我们构建模型
模型=tf.keras.Sequential(…)
model.compile(…,metrics=['accurity'])#需要传递感兴趣的度量
#设置回调
_log\u dir=os.path.join(log\u dir,seed)
tb_callbacks=tf.keras.callbacks.TensorBoard(_log_dir)#log metrics
hp_callbacks=hp.KerasCallback(_log_dir,hparams)#log hparams
#符合模型
历史=model.fit(
…,验证数据=(x\u te,y\u te),回调=[tb\u回调,hp\u回调])
rng=随机。随机(0)
会话索引=0
#随机搜索
num_session_group=4
每组会话数=2
对于范围内的组索引(num会话组):
hparams={h:h.domain.sample_uniform(rng)for h in hparams}
hparams\u string=str(hparams)
对于范围内的重复索引(每个组的会话):
会话id=str(会话索引)
会话索引+=1
健身功能(hparams,会话id)
要检查是否存在任何现有的张力板过程,请在Colab中运行以下操作:

!ps ax | grep tensorboard
假设张力板过程的PID为5315。那么

!kill 5315

# of course, replace the dir below with your log_dir
%tensorboard --logdir='/content/logs/hparam_tuning'

在我的情况下,在我如上所述重置TensorBoard后,它可以正确地记录
模型中指定的度量。编译
,即精度。

,因为我因此损失了几个小时。我想补充一下Julian关于定义hparams配置的一句好话,即您希望使用hparams记录的度量的标记以及
hp.metric(tag='epoch\u accurity',group='validation')
中可能的度量组应该与您使用Keras
model.fit(…,metrics=)捕获的度量中的一个匹配。请参阅,以获取一个很好的示例

我正在尝试解决同样的问题。发布了我的代码,希望它能帮助它使用
hp.KerasCallback
自动记录指标吗?