我tf.estimator
在 Google AI Platform 上使用带有 TensorFlow 2.1 的 API 来构建 DNN 回归器。为了使用 AI Platform Training 超参数调优,我遵循了Google 的文档。我使用了以下配置参数:
配置.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 Platform Training 服务无法识别此指标:
AI Platform 上的作业详细信息
在本地运行代码时,rmse 指标确实会在日志中输出。那么,如何使用 Estimators 使指标可用于 AI Platform 上的训练作业?
此外,还有一个通过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:日志显示没有错误。它表示作业成功完成,即使它失败了。