Jul*_*rry 7 google-cloud-platform keras tensorflow google-cloud-ml gcp-ai-platform-training
(注意:我也在这里问过这个问题)
我一直在尝试让 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)
Run Code Online (Sandbox Code Playgroud)
所以在我的代码中我包括:
# 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
Run Code Online (Sandbox Code Playgroud)
# model.py
class MetricCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self, epoch, logs):
        tf.summary.scalar('val_accuracy', logs['val_accuracy'], epoch)
Run Code Online (Sandbox Code Playgroud)
我什至试过
# 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)
Run Code Online (Sandbox Code Playgroud)
它成功地将“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
        )
Run Code Online (Sandbox Code Playgroud)
哪个有效!但我不明白怎么回事,因为这一切似乎做的是写在AI平台文件工人的/tmp/hypertune/*。Google Cloud 文档中没有任何内容可以解释 AI 平台如何获取此信息...
为了tf.summary.scalar显示事件,我是否遗漏了什么?
gog*_*sca -2
我们在 TF 2.1 中使用 TF Keras 和 AI Platform 对此进行了测试,并成功运行:
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])
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
似乎与您的代码相同,但我无权了解您如何传递回调。我记得在不直接指定回调时看到了一些问题。
代码在这里
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           356 次  |  
        
|   最近记录:  |