(注意:我也在这里问过这个问题)
问题
我一直在尝试让 Google Cloud 的 AI 平台显示在 AI 平台上训练的 Keras 模型的准确性。我配置了超参数调整,hptuning_config.yaml
它可以工作。但是我无法让 AI 平台tf.summary.scalar
在训练期间接听电话。
文档
我一直在关注以下文档页面:
1.超参数调优概述
2.使用超参数调优
根据[1]:
AI Platform Training 如何获取您的指标 您可能会注意到,本文档中没有说明将您的超参数指标传递给 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 看到这一点)。但这并没有被 AI 平台采纳,尽管在[1]中提出了声明。
部分解决方案:
使用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
)
哪个有效!但我不知道如何,因为它似乎所做的只是写入 AI 平台工作人员上的文件/tmp/hypertune/*
。Google Cloud 文档中没有任何内容可以解释 AI 平台是如何发现这一点的……
为了tf.summary.scalar
显示事件,我是否遗漏了一些东西?