Usar um trabalho de varredura para ajuste de hiperparâmetro
No Azure Machine Learning, você pode ajustar os hiperparâmetros executando um trabalho de varredura.
Criar um script de treinamento para ajuste de hiperparâmetro
Para executar um trabalho de varredura, é necessário criar um script de treinamento exatamente como você faria para qualquer outro trabalho de treinamento, exceto pelo fato de que o script deve:
- Incluir um argumento para cada hiperparâmetro que você deseja variar.
- Registrar a métrica de desempenho de destino com MLflow. Uma métrica registrada em log permite que o trabalho de varredura avalie o desempenho das avaliações iniciadas e identifique a que produz o modelo de melhor desempenho.
Observação
Saiba como acompanhar experimentos e modelos de machine learning com o MLflow no Azure Machine Learning.
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 de 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 executar um trabalho de varredura
Para preparar o trabalho de varredura, primeiro você deve 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 os parâmetros de entrada pelo 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 seu trabalho 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á avaliações para cada combinação de hiperparâmetro a ser testada. Para cada avaliação, 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.
Dica
Saiba mais sobre como visualizar trabalhos de ajuste de hiperparâmetro.