Een model opnieuw trainen

Meer informatie over het opnieuw trainen van een machine learning-model in ML.NET.

De wereld en de gegevens veranderen voortdurend. Als zodanig moeten modellen ook worden gewijzigd en bijgewerkt. ML.NET biedt functionaliteit voor het opnieuw trainen van modellen met behulp van geleerde modelparameters als uitgangspunt om voortdurend voort te bouwen op eerdere ervaring in plaats van telkens opnieuw te beginnen.

De volgende algoritmen kunnen opnieuw worden getraind in ML.NET:

Vooraf getraind model laden

Laad eerst het vooraf getrainde model in uw toepassing. Zie Een getraind model opslaan en laden voor meer informatie over het laden van trainingspijplijnen en -modellen.

// Create MLContext
MLContext mlContext = new MLContext();

// Define DataViewSchema of data prep pipeline and trained model
DataViewSchema dataPrepPipelineSchema, modelSchema;

// Load data preparation pipeline
ITransformer dataPrepPipeline = mlContext.Model.Load("data_preparation_pipeline.zip", out dataPrepPipelineSchema);

// Load trained model
ITransformer trainedModel = mlContext.Model.Load("ogd_model.zip", out modelSchema);

Vooraf getrainde modelparameters extraheren

Zodra het model is geladen, extraheert u de geleerde modelparameters door toegang te krijgen tot de Model eigenschap van het vooraf getrainde model. Het vooraf getrainde model is getraind met behulp van het lineaire regressiemodel OnlineGradientDescentTrainer, waarmee een RegressionPredictionTransformer uitvoer wordt gemaakt LinearRegressionModelParameters. Deze modelparameters bevatten de geleerde bias en gewichten of coƫfficiƫnten van het model. Deze waarden worden gebruikt als uitgangspunt voor het nieuwe opnieuw getrainde model.

// Extract trained model parameters
LinearRegressionModelParameters originalModelParameters =
    ((ISingleFeaturePredictionTransformer<object>)trainedModel).Model as LinearRegressionModelParameters;

Notitie

De uitvoer van modelparameters is afhankelijk van het gebruikte algoritme. Maakt bijvoorbeeld gebruik OnlineGradientDescentTrainer van LbfgsMaximumEntropyMulticlassTrainer-uitvoerMaximumEntropyModelParameters.LinearRegressionModelParameters Wanneer u modelparameters extraheert, castt u naar het juiste type.

Een model opnieuw trainen

Het proces voor het opnieuw trainen van een model verschilt niet van dat van het trainen van een model. Het enige verschil is dat de Fit methode naast de gegevens ook de oorspronkelijke geleerde modelparameters als invoer gebruikt en gebruikt als uitgangspunt in het hertrainingsproces.

// New Data
HousingData[] housingData = new HousingData[]
{
    new HousingData
    {
        Size = 850f,
        HistoricalPrices = new float[] { 150000f,175000f,210000f },
        CurrentPrice = 205000f
    },
    new HousingData
    {
        Size = 900f,
        HistoricalPrices = new float[] { 155000f, 190000f, 220000f },
        CurrentPrice = 210000f
    },
    new HousingData
    {
        Size = 550f,
        HistoricalPrices = new float[] { 99000f, 98000f, 130000f },
        CurrentPrice = 180000f
    }
};

//Load New Data
IDataView newData = mlContext.Data.LoadFromEnumerable<HousingData>(housingData);

// Preprocess Data
IDataView transformedNewData = dataPrepPipeline.Transform(newData);

// Retrain model
RegressionPredictionTransformer<LinearRegressionModelParameters> retrainedModel =
    mlContext.Regression.Trainers.OnlineGradientDescent()
        .Fit(transformedNewData, originalModelParameters);

Op dit moment kunt u uw opnieuw getrainde model opslaan en gebruiken in uw toepassing. Zie voor meer informatie het opslaan en laden van een getraind model en het maken van voorspellingen met een getraind modelhulplijnen .

Modelparameters vergelijken

Hoe weet je of hertraining daadwerkelijk is gebeurd? Een manier is om te vergelijken of de parameters van het opnieuw getrainde model afwijken van die van het oorspronkelijke model. Het volgende codevoorbeeld vergelijkt het origineel met de opnieuw getrainde modelgewichten en voert deze uit naar de console.

// Extract Model Parameters of re-trained model
LinearRegressionModelParameters retrainedModelParameters = retrainedModel.Model as LinearRegressionModelParameters;

// Inspect Change in Weights
var weightDiffs =
    originalModelParameters.Weights.Zip(
        retrainedModelParameters.Weights, (original, retrained) => original - retrained).ToArray();

Console.WriteLine("Original | Retrained | Difference");
for(int i=0;i < weightDiffs.Count();i++)
{
    Console.WriteLine($"{originalModelParameters.Weights[i]} | {retrainedModelParameters.Weights[i]} | {weightDiffs[i]}");
}

In de volgende tabel ziet u hoe de uitvoer eruit kan zien.

Oorspronkelijk Opnieuw getraind Verschil
33039.86 56293.76 -23253.9
29099.14 49586.03 -20486.89
28938.38 48609.23 -19670.85
30484.02 53745.43 -23261.41