Een sweep-taak gebruiken voor het afstemmen van hyperparameters

Voltooid

In Azure Machine Learning kunt u hyperparameters afstemmen door een sweep-taak uit te voeren.

Een trainingsscript maken voor het afstemmen van hyperparameters

Als u een sweep-taak wilt uitvoeren, moet u een trainingsscript maken op de manier die u voor elke andere trainingstaak zou doen, behalve dat uw script het volgende moet doen:

  • Neem een argument op voor elke hyperparameter die u wilt variĆ«ren.
  • Registreer de metrische doelprestaties met MLflow. Met een vastgelegde metrische waarde kan de sweep-taak de prestaties van de proefversies evalueren die worden gestart en het model identificeren dat het best presterende model produceert.

Met het volgende voorbeeldscript wordt bijvoorbeeld een logistiek regressiemodel getraind met behulp van een --regularization argument om de regularisatiefrequentie hyperparameter in te stellen en worden de nauwkeurigheidsmetrieken vastgelegd met de naam 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)

Een sweep-taak configureren en uitvoeren

Als u de sweep-taak wilt voorbereiden, moet u eerst een basisopdrachttaak maken die aangeeft welk script moet worden uitgevoerd en de parameters definieert die door het script worden gebruikt:

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",
    )

Vervolgens kunt u uw invoerparameters overschrijven met uw zoekruimte:

from azure.ai.ml.sweep import Choice

command_job_for_sweep = job(
    reg_rate=Choice(values=[0.01, 0.1, 1]),
)

sweep() Roep ten slotte uw opdrachttaak aan om uw zoekruimte te overschonen:

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)

Sweep-taken bewaken en controleren

U kunt sweep-taken in Azure Machine Learning-studio bewaken. Met de sweep-taak worden tests gestart voor elke combinatie van hyperparameter die moet worden geprobeerd. Voor elke proefversie kunt u alle vastgelegde metrische gegevens bekijken.

Daarnaast kunt u modellen evalueren en vergelijken door de experimenten in de studio te visualiseren. U kunt elke grafiek aanpassen om de hyperparameterwaarden en metrische gegevens voor elke proefversie weer te geven en te vergelijken.

Tip

Meer informatie over het visualiseren van hyperparametersafstemmingstaken.