Usar um trabalho de varredura para ajuste de hiperparâmetros

Concluído

No Aprendizado de Máquina do Azure, você pode ajustar hiperparâmetros executando um trabalho de varredura.

Criar um script de treinamento para ajuste de hiperparâmetros

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

  • Inclua um argumento para cada hiperparâmetro que você deseja variar.
  • Registre a métrica de desempenho de destino com MLflow. Uma métrica registrada permite que o trabalho de varredura avalie o desempenho dos testes iniciados 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 --regularization argumento para definir o hiperparâmetro da taxa de regularização e registra a métrica de precisão com o nomeAccuracy:

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 executar um trabalho de varredura

Para preparar o trabalho de varredura, você deve primeiro criar um trabalho de comando base que especifique qual script executar e defina 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 pelo 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]),
)

Finalmente, chame sweep() seu trabalho de comando para varrer seu 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âmetros a ser tentada. Para cada avaliação, você pode revisar todas as métricas registradas.

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