Use um trabalho de varredura para ajuste de hiperparâmetros
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.
Nota
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 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.
Dica
Saiba mais sobre como visualizar trabalhos de ajuste de hiperparâmetro.