Usar un proceso de barrido para el ajuste de hiperparámetros
En Azure Machine Learning, puede ajustar hiperparámetros mediante la ejecución de un trabajo de barrido de .
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 para cualquier otro trabajo de entrenamiento, excepto que el script debe:
- Incluya un argumento para cada hiperparámetros que desee variar.
- Registra la métrica de rendimiento de destino con MLflow. Una métrica registrada permite al trabajo de barrido evaluar el rendimiento de las pruebas que inicia e identificar el que genera el modelo de mejor rendimiento.
Nota
Por ejemplo, el siguiente script de ejemplo entrena un modelo de regresión logística mediante un argumento --regularization
para establecer el hiperparámetro de tasa de regularización y registra el 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)
Configurar y ejecutar un trabajo de barrido
Para preparar el trabajo de barrido, primero debe crear un trabajo base de comando que especifique qué script se va a 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",
)
A continuación, 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, ejecute sweep()
en su tarea 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 trabajos de barrido en Azure Machine Learning Studio. El trabajo de barrido iniciará evaluaciones 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 Studio. Puede ajustar cada gráfico para mostrar y comparar los valores y las métricas de hiperparámetros para cada prueba.
Propina
Obtenga más información sobre cómo visualizar trabajos de ajuste de hiperparámetros.