Uso de un trabajo de barrido para el ajuste de hiperparámetros
En Azure Machine Learning, puede ajustar los hiperparámetros ejecutando un trabajo de barrido.
Creación de un script de entrenamiento para el ajuste de hiperparámetros
Para ejecutar un trabajo de barrido, debe crear un script de entrenamiento tal como lo haría con cualquier otro experimento de entrenamiento, salvo que el script debe:
- Incluir un argumento para cada hiperparámetro que quiere modificar.
- Registrar la métrica de rendimiento de destino con MLflow. Una métrica de registro permite que el trabajo de barrido evalúe el rendimiento de las pruebas que inicia, e identifica la que genera el modelo de mejor rendimiento.
Nota
Por ejemplo, el script de ejemplo siguiente entrena un modelo de regresión logística con un argumento --regularization
para establecer el hiperparámetro de tasa de regularización y registra la métrica de precisión con el nombre 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)
Configuración y ejecución de un trabajo de barrido
Para preparar el trabajo de barrido, primero debe crear un trabajo de comando base que especifique qué script ejecutar y defina los parámetros usados por el 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",
)
Después, puede invalidar los parámetros de entrada con el espacio de búsqueda:
from azure.ai.ml.sweep import Choice
command_job_for_sweep = job(
reg_rate=Choice(values=[0.01, 0.1, 1]),
)
Por último, llame a sweep()
en el trabajo de comando para barrer el espacio de búsqueda:
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)
Supervisión y revisión de trabajos de barrido
Puede supervisar los trabajos de barrido en Estudio de Azure Machine Learning. El trabajo de barrido iniciará pruebas para cada combinación de hiperparámetros que se va a probar. Para cada prueba, puede revisar todas las métricas registradas.
Además, puede evaluar y comparar modelos mediante la visualización de las pruebas en Estudio. Puede ajustar cada gráfico para mostrar y comparar los valores de hiperparámetros y las métricas de cada prueba.
Sugerencia
Obtenga más información sobre cómo visualizar trabajos de ajuste de hiperparámetros.