Modeli yeniden eğitme
ML .net sürümünde bir makine öğrenimi modelini yeniden eğitme hakkında bilgi edinin.
Dünya ve çevresindeki veriler sabit bir hızda değişir. Bu nedenle, modellerin de değiştirilmesi ve güncelleştirilmesi gerekir. ML .net, her seferinde sıfırdan başlamak yerine, bir başlangıç noktası olarak öğrenilmiş model parametrelerini kullanan yeniden eğitim modelleri için işlevsellik sağlar.
aşağıdaki algoritmalar ML .net sürümünde yeniden eğitiliyor:
- AveragedPerceptronTrainer
- FieldAwareFactorizationMachineTrainer
- LbfgsLogisticRegressionBinaryTrainer
- Lbfgsmaximumentropybirden çok Lasstrainer
- Lbfgspoissongerilesiontrainer
- Doğrsvmtrainer
- Onlinegradientharfin Ttrainer
- Sgddtu Oytedtrainer
- Sgdnondtu ırtedtrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
Önceden eğitilen modeli yükle
İlk olarak, önceden eğitilen 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ğitilen 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ğitilen model parametrelerini Ayıkla
Model yüklendikten sonra, Model önceden eğitilen modelin özelliğine erişerek öğrenilen model parametrelerini ayıklayın. Önceden eğitilen model, OnlineGradientDescentTrainer Bu çıktıları oluşturan doğrusal regresyon modeli kullanılarak eğitildi RegressionPredictionTransformer LinearRegressionModelParameters . Bu model parametreleri, modelin öğrenilen sapma ve ağırlıklarını veya katsayılarını içerir. Bu değerler, yeni yeniden eğitilen model için bir başlangıç noktası olarak kullanılacaktı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ğin OnlineGradientDescentTrainer LinearRegressionModelParameters , Lbfgsmaximumentropyçok lasstrainer çıktıları sırasında kullanır MaximumEntropyModelParameters . Model parametrelerini ayıkladığınızda uygun türe atayın.
Modeli yeniden eğitme
Modeli yeniden eğitime işlemi, bir modelin eğitiminden farklı değildir. Tek fark, Fit verilerin yanı sıra özgün öğrenilen model parametrelerini giriş olarak da alır ve bunları yeniden eğitim sürecinde bir başlangıç noktası olarak kullanı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 eğitilen modeli kaydetme ve yükleme ve eğitilen bir model kılavuzlarıyla tahminleri yapma bölümüne bakın.
Model parametrelerini Karşılaştır
Yeniden eğitimin gerçekten gerçekleştiğini nasıl anlarsınız? Bir yol, yeniden eğitilen model parametrelerinin orijinal modelden farklı olup olmadığını karşılaştırmak olacaktır. Aşağıdaki kod örneği, orijinali yeniden eğitilen model ağırlıklarına karşı karşılaştırır ve bunları konsola çıkarır.
// 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ğini gösterilmektedir.
| Özgün | Eğitilebileceği | 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 |