Använda ett svepjobb för justering av hyperparametrar

Slutförd

I Azure Machine Learning kan du finjustera hyperparametrar genom att köra ett svepjobb.

Skapa ett träningsskript för justering av hyperparametrar

Om du vill köra ett svepjobb måste du skapa ett träningsskript precis som du skulle göra för andra träningsjobb, förutom att skriptet måste:

  • Inkludera ett argument för varje hyperparameter som du vill variera.
  • Logga målprestandamåttet med MLflow. Ett loggat mått gör det möjligt för svepjobbet att utvärdera prestanda för de utvärderingsversioner som initieras och identifiera det som genererar modellen med bäst prestanda.

Följande exempelskript tränar till exempel en logistisk regressionsmodell med hjälp av ett --regularization argument för att ange hyperparametern för regulariseringshastighet och loggar noggrannhetsmåttet med namnet 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)

Konfigurera och köra ett svepjobb

För att förbereda svepjobbet måste du först skapa ett baskommandojobb som anger vilket skript som ska köras och definierar de parametrar som används av skriptet:

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

Du kan sedan åsidosätta dina indataparametrar med ditt sökutrymme:

from azure.ai.ml.sweep import Choice

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

Anropa sweep() slutligen kommandojobbet för att svepa över sökutrymmet:

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)

Övervaka och granska svepjobb

Du kan övervaka svepjobb i Azure Machine Learning-studio. Svepjobbet initierar utvärderingsversioner för varje kombination av hyperparametrar som ska provas. För varje utvärderingsversion kan du granska alla loggade mått.

Dessutom kan du utvärdera och jämföra modeller genom att visualisera utvärderingsversionerna i studion. Du kan justera varje diagram för att visa och jämföra hyperparametervärden och mått för varje utvärderingsversion.

Dricks

Läs mer om hur du visualiserar justeringsjobb för hyperparametrar.