Share via


Modeli yeniden eğitme

ML.NET'da makine öğrenmesi modelini yeniden eğitmeyi öğrenin.

Dünya ve verileri sürekli değişir. Bu nedenle modellerin de değişmesi ve güncelleştirilmesi gerekir. ML.NET, her seferinde sıfırdan başlamak yerine sürekli olarak önceki deneyimi temel alan bir başlangıç noktası olarak öğrenilen model parametrelerini kullanarak modelleri yeniden eğitmeye yönelik işlevsellik sağlar.

Aşağıdaki algoritmalar ML.NET içinde yeniden eğitilebilir:

Önceden eğitilmiş modeli yükleme

İlk olarak, önceden eğitilmiş modeli uygulamanıza yükleyin. Eğitim işlem hatlarını ve modellerini yükleme hakkında daha fazla bilgi edinmek için bkz . Eğitilmiş modeli kaydetme ve yükleme.

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

Önceden eğitilmiş model parametrelerini ayıklama

Model yüklendikten sonra, önceden eğitilen modelin özelliğine Model erişerek öğrenilen model parametrelerini ayıklayın. Önceden eğitilen model, çıkışını LinearRegressionModelParametersoluşturan RegressionPredictionTransformer doğrusal regresyon modeli OnlineGradientDescentTrainerkullanılarak eğitildi. Bu model parametreleri, modelin öğrenilen sapmalarını ve ağırlıklarını veya katsayılarını içerir. Bu değerler, yeni yeniden eğitilen model için başlangıç noktası olarak kullanılır.

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

Not

Model parametreleri çıkışı, kullanılan algoritmaya bağlıdır. ÖrneğinOnlineGradientDescentTrainer, LbfgsMaximumEntropyMulticlassTrainer çıkışını verirken MaximumEntropyModelParameterskullanırLinearRegressionModelParameters. Model parametrelerini ayıklarken uygun türe yayınlayın.

Modeli yeniden eğitme

Modeli yeniden eğitme işlemi, modeli eğitme işleminden farklı değildir. Tek fark, Fit verilere ek olarak yöntemin özgün öğrenilen model parametrelerini de giriş olarak alması ve bunları yeniden eğitme işleminde başlangıç noktası olarak kullanmasıdır.

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

Bu noktada, yeniden eğitilen modelinizi kaydedebilir ve uygulamanızda kullanabilirsiniz. Daha fazla bilgi için bkz. Eğitilmiş modeli kaydetme ve yükleme ve eğitilmiş model kılavuzlarıyla tahminlerde bulunma.

Model parametrelerini karşılaştırma

Yeniden eğitme işleminin gerçekten olup olmadığını nereden biliyorsun? Bunun bir yolu, yeniden eğitilen modelin parametrelerinin özgün modelin parametrelerinden farklı olup olmadığını karşılaştırmaktır. Aşağıdaki kod örneği, özgün modeli yeniden eğitilen model ağırlıklarıyla karşılaştırır ve bunları konsola gönderir.

// 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]}");
}

Aşağıdaki tabloda çıktının nasıl görünebileceği gösterilmektedir.

Özgün Yeniden eğitildi Fark
33039.86 56293.76 -23253.9
29099.14 49586.03 -20486.89
28938.38 48609.23 -19670.85
30484.02 53745.43 -23261.41