Я использую tf.estimator
API с TensorFlow 2.1 на платформе Google AI для создания регрессора DNN. Чтобы использовать настройку гиперпараметров AI Platform Training, я следовал документам Google а>. Я использовал следующие параметры конфигурации:
config.yaml:
trainingInput:
scaleTier: BASIC
hyperparameters:
goal: MINIMIZE
maxTrials: 2
maxParallelTrials: 2
hyperparameterMetricTag: rmse
enableTrialEarlyStopping: True
params:
- parameterName: batch_size
type: DISCRETE
discreteValues:
- 100
- 200
- 300
- parameterName: lr
type: DOUBLE
minValue: 0.0001
maxValue: 0.1
scaleType: UNIT_LOG_SCALE
И чтобы добавить метрику к моему резюме, я использовал следующий код для моего DNNRegressor:
def rmse(labels, predictions):
pred_values = predictions['predictions']
rmse = tf.keras.metrics.RootMeanSquaredError(name='root_mean_squared_error')
rmse.update_state(labels, pred_values)
return {'rmse': rmse}
def train_and_evaluate(hparams):
...
estimator = tf.estimator.DNNRegressor(
model_dir = output_dir,
feature_columns = get_cols(),
hidden_units = [max(2, int(FIRST_LAYER_SIZE * SCALE_FACTOR ** i))
for i in range(NUM_LAYERS)],
optimizer = tf.keras.optimizers.Adam(learning_rate=LEARNING_RATE),
config = run_config)
estimator = tf.estimator.add_metrics(estimator, rmse)
Согласно документации Google, функция add_metric
создает новую оценку с указанной метрикой, которая затем используется в качестве метрики гиперпараметра. Однако служба обучения платформе AI не распознает этот показатель: Сведения о вакансии на платформе AI
При локальном запуске кода метрика rmse выводится в журналы. Итак, как мне сделать метрику доступной для работы по обучению на платформе AI с помощью оценщиков?
Кроме того, существует возможность создания отчетов о показателях с помощью пакета cloudml-hypertune
Python. Но для этого требуется значение метрики в качестве одного из входных аргументов. Как мне извлечь метрику из функции tf.estimator.train_and_evaluate
(поскольку эту функцию я использую для обучения / оценки моего оценщика) для ввода в функцию report_hyperparameter_tuning_metric
?
hpt = hypertune.HyperTune()
hpt.report_hyperparameter_tuning_metric(
hyperparameter_metric_tag='rmse',
metric_value=??,
global_step=1000
)
ETA: Журналы не содержат ошибок. В нем говорится, что работа завершена успешно, даже если она не удалась.