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:
- AveragedPerceptronTrainer
- FieldAwareFactorizationMachineTrainer
- LbfgsLogisticRegressionBinaryTrainer
- LbfgsMaximumEntropyMulticlassTrainer
- LbfgsPoissonRegressionTrainer
- LinearSvmTrainer
- OnlineGradientDescentTrainer
- SgdCalibratedTrainer
- SgdNonCalibratedTrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
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 OnlineGradientDescentTrainer
regresi linier , yang membuat RegressionPredictionTransformer
output LinearRegressionModelParameters
tersebut . 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 .MaximumEntropyModelParameters
LinearRegressionModelParameters
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 |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk