Ошибка Sagemaker для задания HyperParameterTuning - PullRequest
0 голосов
/ 30 марта 2020

Я проверил форумы aws и здесь в SO, и я не могу найти решение этой ошибки или объяснение того, что это такое.

Полная ошибка:

UnexpectedStatusException: Error for HyperParameterTuning job sagemaker-xgboost-200330-1544: Failed. Reason: No objective metrics found after running 5 training jobs. Please ensure that the custom algorithm is emitting the objective metric as defined by the regular expression provided.

, и это соответствует следующему коду:

xgbt = sagemaker.estimator.Estimator(container, #name of training container
                                    role, # IAM role to use
                                    train_instance_count = 1, # number of instances yo use for training
                                    train_instance_type = 'ml.m4.xlarge', #type of virtual machine to use
                                    output_path = 's3://{}/{}/output'.format(session.default_bucket(),
                                                                            prefix),
                                    sagemaker_session = session) #current sagemaker session


xgbt.set_hyperparameters(
    max_depth = 5,
    eta = 0.1,
    eval_metric='auc',
    objective='binary:logistic',
    early_stopping_rounds=500,
    rate_drop=0.1,
    colsample_bytree=0.8,
    subsample=0.75,
    min_child_weight=0,
    num_round = 500)


xgbt.fit({'train': s3_input_train})

, а затем настройка гиперпараметра находится там, где она каркает:

from sagemaker.tuner import IntegerParameter, ContinuousParameter, HyperparameterTuner

xgb_hyperparameter_tuner = HyperparameterTuner(estimator = xgbt, # The estimator object to use as the basis for the training jobs.
                                               objective_metric_name = 'validation:auc', # The metric used to compare trained models.
                                               objective_type = 'Maximize', # Whether we wish to minimize or maximize the metric.
                                               max_jobs = 20, # The total number of models to train
                                               max_parallel_jobs = 3, # The number of models to train in parallel
                                               hyperparameter_ranges = {
                                                    'max_depth': IntegerParameter(3, 12),
                                                    'eta'      : ContinuousParameter(0.01, 0.5),
                                                    'min_child_weight': IntegerParameter(2, 8),
                                                    'subsample': ContinuousParameter(0.5, 0.9),
                                                    'gamma': ContinuousParameter(0, 10),
                                               })

xgb_hyperparameter_tuner.fit({'train': s3_input_train})

xgb_hyperparameter_tuner.wait()

Я думаю, что метрики правильно определены, поэтому я не знаю, чего он хочет от меня.

Большое спасибо за то, что проверили это.

...