(Примечание: я также задавал этот вопрос здесь )
Проблема
Я пытался заставить платформу ИИ Google Cloud отображать точность Кераса модель, обученная на платформе AI. Я настроил настройку гиперпараметра с hptuning_config.yaml
, и он работает. Однако я не могу заставить платформу ИИ принимать tf.summary.scalar
вызовов во время обучения.
Документация
Я просматриваю следующие страницы документации:
1 , Обзор настройки гиперпараметра
2. Использование настройки гиперпараметра
Согласно [1] :
Как обучение на платформе AI получает ваши метри c Вы можете заметить, что в этой документации нет инструкций по передаче вашего гиперпараметра metri c в службу обучения AI Platform Training. Это связано с тем, что служба отслеживает сводные события TensorFlow, сгенерированные вашим учебным приложением, и извлекает метри c. "
И в соответствии с [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' c в хранилище 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 worker в /tmp/hypertune/*
. В Google Cloud ничего нет документация, объясняющая, как это воспринимается платформой ИИ ...
Я что-то упустил, чтобы отобразить tf.summary.scalar
событий?