Erneutes Trainieren eines ModellsRe-train a model

Erfahren Sie, wie ein Machine Learning-Modell in ML.NET erneut trainieren.Learn how to retrain a machine learning model in ML.NET.

Die Welt und die Daten um sie herum verändern sich in einem konstanten Tempo.The world and the data around it change at a constant pace. Daher müssen auch Modelle geändert und aktualisiert werden.As such, models need to change and update as well. ML.NET bietet Funktionen für das erneute Trainieren von Modellen unter Verwendung erlernter Modellparameter als Ausgangspunkt, um kontinuierlich auf früheren Erfahrungen aufzubauen, anstatt jedes Mal bei Null anzufangen.ML.NET provides functionality for re-training models using learned model parameters as a starting point to continually build on previous experience rather than starting from scratch every time.

Die folgenden Algorithmen sind in ML.NET erneut trainierbar:The following algorithms are re-trainable in ML.NET:

Laden eines vorab trainierten ModellsLoad pre-trained model

Laden Sie zunächst das vorab trainierte Modell in Ihrer Anwendung.First, load the pre-trained model into your application. Weitere Informationen über das Laden von Trainingspipelines und -modellen finden Sie unter Speichern und Laden eines trainierten Modells.To learn more about loading training pipelines and models, see Save and load a trained model.

// 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);

Extrahieren von vorab trainierten ModellparameternExtract pre-trained model parameters

Sobald das Modell geladen ist, extrahieren Sie die erlernten Modellparameter, indem Sie auf die Model-Eigenschaft des vorab trainierten Modells zugreifen.Once the model is loaded, extract the learned model parameters by accessing the Model property of the pre-trained model. Das vorab trainierte Modell wurde mit dem linearen Regressionsmodell OnlineGradientDescentTrainer trainiert, das einen RegressionPredictionTransformer erstellt, der LinearRegressionModelParameters ausgibt.The pre-trained model was trained using the linear regression model OnlineGradientDescentTrainer which creates aRegressionPredictionTransformer that outputs LinearRegressionModelParameters. Diese Parameter des linearen Regressionsmodells enthalten den erlernten Trend und die Gewichtung oder die Koeffizienten des Modells.These linear regression model parameters contain the learned bias and weights or coefficients of the model. Diese Werte werden als Ausgangspunkt für das neue, erneut trainierte Modell verwendet.These values will be used as a starting point for the new re-trained model.

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

Erneutes Trainieren eines ModellsRe-train model

Der Prozess des erneuten Trainierens eines Modells unterscheidet sich nicht von dem des Trainierens eines Modells.The process for retraining a model is no different than that of training a model. Der einzige Unterschied besteht darin, dass die Fit-Methode zusätzlich zu den Daten auch die ursprünglich erlernten Modellparameter als Eingabe übernimmt und sie als Ausgangspunkt für das erneute Training verwendet.The only difference is, the Fit method in addition to the data also takes as input the original learned model parameters and uses them as a starting point in the re-training process.

// 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);

Vergleichen von ModellparameternCompare model parameters

Woher wissen Sie, ob das Modell wirklich erneut trainiert wurde?How do you know if re-training actually happened? Eine Möglichkeit wäre, zu vergleichen, ob sich die Parameter des erneut trainierten Modells von denen des Originalmodells unterscheiden.One way would be to compare whether the re-trained model's parameters are different than those of the original model. Das folgende Codebeispiel vergleicht das Original mit den Gewichtungen des erneut trainierten Modells und gibt sie an die Konsole aus.The code sample below compares the original against the re-trained model weights and outputs them to the 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 der folgenden Tabelle sehen Sie, wie eine Ausgabe aussehen könnte.The table below shows what the output might look like.

UrsprünglichOriginal Erneut trainiertRetrained UnterschiedDifference
33039,8633039.86 56293,7656293.76 -23253,9-23253.9
29099,1429099.14 49586,0349586.03 -20486,89-20486.89
28938,3828938.38 48609,2348609.23 -19670,85-19670.85
30484,0230484.02 53745,4353745.43 -23261,41-23261.41