Bagikan melalui


Melatang ulang model

Pelajari cara melatang kembali model pembelajaran mesin di ML.NET.

Dunia dan datanya berubah terus-menerus. Dengan demikian, model juga perlu berubah dan diperbarui. ML.NET menyediakan fungsionalitas untuk melatih kembali model menggunakan parameter model yang dipelajari sebagai titik awal untuk terus membangun pengalaman sebelumnya daripada memulai dari awal setiap saat.

Algoritma berikut dapat dilatih kembali dalam ML.NET:

Memuat model yang telah dilatih sebelumnya

Pertama, muat model yang telah dilatih sebelumnya ke dalam aplikasi Anda. Untuk mempelajari selengkapnya tentang memuat alur dan model pelatihan, lihat Menyimpan dan memuat model terlatih.

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

Mengekstrak parameter model yang telah dilatih sebelumnya

Setelah model dimuat, ekstrak parameter model yang dipelajari dengan mengakses Model properti model yang telah dilatih sebelumnya. Model yang telah dilatih sebelumnya dilatih menggunakan model OnlineGradientDescentTrainerregresi linier , yang membuat RegressionPredictionTransformer output LinearRegressionModelParameterstersebut . Parameter model ini berisi bias dan bobot atau koefisien model yang dipelajari. Nilai-nilai ini digunakan sebagai titik awal untuk model baru yang dilatih ulang.

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

Catatan

Output parameter model bergantung pada algoritma yang digunakan. Misalnya OnlineGradientDescentTrainer menggunakan , sementara LbfgsMaximumEntropyMulticlassTrainer menghasilkan .MaximumEntropyModelParametersLinearRegressionModelParameters Saat mengekstrak parameter model, transmisikan ke jenis yang sesuai.

Melatang ulang model

Proses untuk melatih kembali model tidak berbeda dari pelatihan model. Satu-satunya perbedaan adalah, Fit metode selain data juga mengambil parameter model asli yang dipelajari sebagai input dan menggunakannya sebagai titik awal dalam proses pelatihan ulang.

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

Pada titik ini, Anda dapat menyimpan model yang dilatih kembali dan menggunakannya di aplikasi Anda. Untuk informasi selengkapnya, lihat menyimpan dan memuat model terlatih dan membuat prediksi dengan panduan model terlatih.

Membandingkan parameter model

Bagaimana Anda tahu apakah pelatihan ulang benar-benar terjadi? Salah satu caranya adalah membandingkan apakah parameter model yang dilatih kembali berbeda dari parameter model aslinya. Sampel kode berikut membandingkan yang asli dengan bobot model yang dilatih kembali dan menghasilkannya ke konsol.

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

Tabel berikut ini memperlihatkan seperti apa outputnya.

Asli Dilatih kembali Perbedaan
33039.86 56293.76 -23253.9
29099.14 49586.03 -20486.89
28938.38 48609.23 -19670.85
30484.02 53745.43 -23261.41