Opakované trénování modeluRe-train a model

Naučte se přeškolit model strojového učení v ML.NET.Learn how to retrain a machine learning model in ML.NET.

Svět a data, která se pohybují, se mění při konstantním tempu.The world and the data around it change at a constant pace. V takovém případě je potřeba, aby se modely změnily a aktualizovaly i.As such, models need to change and update as well. ML.NET poskytuje funkce pro opětovné školení modelů pomocí pořízených parametrů modelu jako výchozího bodu pro průběžné sestavování na předchozí prostředí a nikoli při každém neúplném psaní.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.

Následující algoritmy jsou znovu vlakové v ML.NET:The following algorithms are re-trainable in ML.NET:

Načíst předem trained modelLoad pre-trained model

Nejdřív načtěte předem vyškolený model do aplikace.First, load the pre-trained model into your application. Další informace o načítání školicích kanálů a modelů najdete v tématu uložení a načtení trained model.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);

Extrakce předučených parametrů modeluExtract pre-trained model parameters

Po načtení modelu rozbalte zjištěné parametry modelu tím, že získáte přístup k vlastnosti Model předučeného modelu.Once the model is loaded, extract the learned model parameters by accessing the Model property of the pre-trained model. Předučený model byl vyškolený pomocí modelu lineární regrese OnlineGradientDescentTrainer , který vytvoříRegressionPredictionTransformer , které výstup LinearRegressionModelParameters.The pre-trained model was trained using the linear regression model OnlineGradientDescentTrainer which creates aRegressionPredictionTransformer that outputs LinearRegressionModelParameters. Tyto parametry modelu lineární regrese obsahují zjištěné odchylky a váhy nebo koeficienty modelu.These linear regression model parameters contain the learned bias and weights or coefficients of the model. Tyto hodnoty budou použity jako výchozí bod pro nový znovu vyškolený model.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;

Opětovné výuka modeluRe-train model

Proces pro přeškolení modelu se neliší od školení modelu.The process for retraining a model is no different than that of training a model. Jediným rozdílem je, že metoda Fit kromě dat také přijímá jako vstup původní naučené parametry modelu a používá je jako výchozí bod v procesu opětovného školení.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);

Porovnat parametry modeluCompare model parameters

Jak zjistíte, jestli se vlastní školení skutečně stalo?How do you know if re-training actually happened? Jedním ze způsobů je porovnat, jestli jsou parametry přeučeného modelu jiné než u původního modelu.One way would be to compare whether the re-trained model's parameters are different than those of the original model. Následující ukázka kódu porovnává původní váhu podle znovu vyškolených modelů a vypíše je do konzoly.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]}");
}

Následující tabulka obsahuje informace o tom, jak může vypadat výstup.The table below shows what the output might look like.

PůvodněOriginal PřetrénovatRetrained RozdílDifference
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