Een sweep-job gebruiken voor het tunen van hyperparameters
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 zoals u dat zou doen voor elke andere trainingstaak, behalve dat uw script moet:
- 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.
Notitie
Leer hoe u machine learning-experimenten en -modellen kunt bijhouden met MLflow in Azure Machine Learning.
Met het volgende voorbeeldscript wordt bijvoorbeeld een logistiek regressiemodel getraind met behulp van een --regularization
argument om de regularisatiesnelheid hyperparameter in te stellen en wordt de nauwkeurigheid metriek met de naam Accuracy
vastgelegd.
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 basistaak maken opdrachttaak die aangeeft welk script moet worden uitgevoerd en definieert u de parameters 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]),
)
Roep tot slot sweep()
aan voor uw opdrachttaak om uw zoekruimte te doorzoeken:
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)
Veegwerkzaamheden monitoren en evalueren
U kunt sweep-taken bewaken in Azure Machine Learning Studio. Met de sweep-taak worden proeven gestart voor elke combinatie van hyperparameters die moeten worden uitgeprobeerd. 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 hoe je hyperparameterafstemmingstaken kunt visualiseren.