(注意:我也问过这个问题here)
我一直在尝试获取Google Cloud的AI平台,以显示经过AI平台培训的Keras模型的准确性。我使用hptuning_config.yaml
配置了超参数调整,并且可以正常工作。但是,我无法在训练期间使用AI平台接听tf.summary.scalar
个电话。
我一直在关注以下文档页面:
1。 Overview of hyperparameter tuning
2。 Using hyperparameter tuning
根据 [1] :
AI平台培训如何获取指标 您可能会注意到,本文档中没有关于将超参数指标传递给AI Platform Training培训服务的说明。这是因为该服务监视您的训练应用程序生成的TensorFlow摘要事件并检索指标。”
并且根据 [2] ,生成这样的Tensorflow摘要事件的一种方法是通过这样创建一个回调类:
class MyMetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
所以在我的代码中,我包括了:
# hptuning_config.yaml
trainingInput:
hyperparameters:
goal: MAXIMIZE
maxTrials: 4
maxParallelTrials: 2
hyperparameterMetricTag: val_accuracy
params:
- parameterName: learning_rate
type: DOUBLE
minValue: 0.001
maxValue: 0.01
scaleType: UNIT_LOG_SCALE
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
tf.summary.scalar('val_accuracy', logs['val_accuracy'], epoch)
我什至尝试
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def __init__(self, logdir):
self.writer = tf.summary.create_file_writer(logdir)
def on_epoch_end(self, epoch, logs):
with writer.as_default():
tf.summary.scalar('val_accuracy', logs['val_accuracy'], epoch)
成功将“ val_accuracy”指标保存到Google存储设备中(我也可以在TensorBoard中看到它)。但是,尽管 [1] 提出了要求,但AI平台并没有意识到这一点。
使用Cloud ML Hypertune包,我创建了以下类:
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
def __init__(self):
self.hpt = hypertune.HyperTune()
def on_epoch_end(self, epoch, logs):
self.hpt.report_hyperparameter_tuning_metric(
hyperparameter_metric_tag='val_accuracy',
metric_value=logs['val_accuracy'],
global_step=epoch
)
有效!但是我不知道如何做,因为它似乎要做的就是在/tmp/hypertune/*
的AI平台 worker 上写入文件。 Google Cloud文档中没有任何内容可以解释AI平台是如何获取它的...
我是否想丢失一些东西以便显示tf.summary.scalar
事件?
答案 0 :(得分:1)
我遇到了一个同样的问题,即我无法使AI平台接收tf.summary.scalar。在过去的两个月中,我尝试与GCP支持和AI平台工程团队一起对其进行调试。即使我们使用几乎相同的代码,他们也无法重现该问题。我们甚至进行了一次编码会议,但结果仍然不同。
GCP AI平台工程团队的建议:“不要使用tf.summary.scalar” ,主要原因是使用其他方法:
他们将更新文档以反映此新建议。
设置:
通过以下设置可以观察到“问题”:
似乎可以与其他设置一起使用。无论如何,我将遵循GCP的建议,并使用自定义解决方案来避免出现问题
答案 1 :(得分:-1)
我们在TF 2.1中使用TF Keras和AI平台对此进行了测试,并成功运行:
class CustomCallback(tf.keras.callbacks.TensorBoard):
"""Callback to write out a custom metric used by CAIP for HP Tuning."""
def on_epoch_end(self, epoch, logs=None): # pylint: disable=no-self-use
"""Write tf.summary.scalar on epoch end."""
tf.summary.scalar('epoch_accuracy', logs['accuracy'], epoch)
# Setup TensorBoard callback.
custom_cb = CustomCallback(os.path.join(args.job_dir, 'metric_tb'),
histogram_freq=1)
# Train model
keras_model.fit(
training_dataset,
steps_per_epoch=int(num_train_examples / args.batch_size),
epochs=args.num_epochs,
validation_data=validation_dataset,
validation_steps=1,
verbose=1,
callbacks=[custom_cb])
trainingInput:
hyperparameters:
goal: MAXIMIZE
maxTrials: 4
maxParallelTrials: 2
hyperparameterMetricTag: epoch_accuracy
params:
- parameterName: batch-size
type: INTEGER
minValue: 8
maxValue: 256
scaleType: UNIT_LINEAR_SCALE
- parameterName: learning-rate
type: DOUBLE
minValue: 0.01
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
似乎与您的代码相同,但我无权访问如何传递回调。我记得在不直接指定回调时遇到了一些问题。
代码here