Use um trabalho de varredura para ajuste de hiperparâmetros

Concluído

No Azure Machine Learning, você pode ajustar hiperparâmetros executando um trabalho de varredura .

Criar um script de treinamento para ajuste de hiperparâmetro

Para executar uma tarefa de varredura, você precisa criar um script de treinamento da mesma forma que faria para qualquer outra tarefa de treinamento, exceto que seu script deve:

  • Inclua um argumento para cada hiperparâmetro que você deseja variar.
  • Registre a métrica de desempenho alvo com MLflow . Uma métrica registrada permite que a tarefa de varredura avalie o desempenho dos ensaios que inicia e identifique aquele que produz o modelo com melhor desempenho.

Por exemplo, o script de exemplo a seguir treina um modelo de regressão logística usando um argumento --regularization para definir o hiperparâmetro da taxa de regularização e registra a métrica de precisão com o nome Accuracy.

import argparse
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import mlflow

# get regularization hyperparameter
parser = argparse.ArgumentParser()
parser.add_argument('--regularization', type=float, dest='reg_rate', default=0.01)
args = parser.parse_args()
reg = args.reg_rate

# load the training dataset
data = pd.read_csv("data.csv")

# separate features and labels, and split for training/validatiom
X = data[['feature1','feature2','feature3','feature4']].values
y = data['label'].values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)

# train a logistic regression model with the reg hyperparameter
model = LogisticRegression(C=1/reg, solver="liblinear").fit(X_train, y_train)

# calculate and log accuracy
y_hat = model.predict(X_test)
acc = np.average(y_hat == y_test)
mlflow.log_metric("Accuracy", acc)

Configurar e realizar uma tarefa de varredura

Para preparar o trabalho de varredura, primeiro você deve criar um trabalho de comando base que especifica qual script executar e define os parâmetros usados pelo script:

from azure.ai.ml import command

# configure command job as base
job = command(
    code="./src",
    command="python train.py --regularization ${{inputs.reg_rate}}",
    inputs={
        "reg_rate": 0.01,
    },
    environment="AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest",
    compute="aml-cluster",
    )

Em seguida, você pode substituir seus parâmetros de entrada com seu espaço de pesquisa:

from azure.ai.ml.sweep import Choice

command_job_for_sweep = job(
    reg_rate=Choice(values=[0.01, 0.1, 1]),
)

Por fim, chame sweep() em sua tarefa de comando para varrer o espaço de pesquisa.

from azure.ai.ml import MLClient

# apply the sweep parameter to obtain the sweep_job
sweep_job = command_job_for_sweep.sweep(
    compute="aml-cluster",
    sampling_algorithm="grid",
    primary_metric="Accuracy",
    goal="Maximize",
)

# set the name of the sweep job experiment
sweep_job.experiment_name="sweep-example"

# define the limits for this sweep
sweep_job.set_limits(max_total_trials=4, max_concurrent_trials=2, timeout=7200)

# submit the sweep
returned_sweep_job = ml_client.create_or_update(sweep_job)

Monitorar e revisar trabalhos de varredura

Você pode monitorar trabalhos de varredura no estúdio do Azure Machine Learning. O trabalho de varredura iniciará testes para cada combinação de hiperparâmetro a serem testadas. Para cada teste, você pode examinar todas as métricas registradas.

Além disso, você pode avaliar e comparar modelos visualizando as avaliações no estúdio. Você pode ajustar cada gráfico para mostrar e comparar os valores e as métricas do hiperparâmetro para cada avaliação.