Modell újratanítása
Ismerje meg, hogyan taníthat be újra egy gépi tanulási modellt ML.NET.
A világ és adatai folyamatosan változnak. Ezért a modelleket is módosítani és frissíteni kell. ML.NET lehetővé teszi a modellek újratanítását a tanult modellparaméterek használatával kiindulópontként, hogy ahelyett, hogy minden alkalommal az alapoktól kezdve folyamatosan építene a korábbi tapasztalatokra.
A következő algoritmusok újrataníthatók ML.NET:
- AveragedPerceptronTrainer
- FieldAwareFactorizationMachineTrainer
- LbfgsLogisticRegressionBinaryTrainer
- LbfgsMaximumEntropyMulticlassTrainer
- LbfgsPoissonRegressionTrainer
- LinearSvmTrainer
- OnlineGradientDescentTrainer
- SgdCalibratedTrainer
- SgdNonCalibratedTrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
Előre betanított modell betöltése
Először töltse be az előre betanított modellt az alkalmazásba. A betanítási folyamatok és modellek betöltéséről további információt a Betanított modellek mentése és betöltése című témakörben talál.
// 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);
Előre betanított modellparaméterek kinyerése
A modell betöltése után az előre betanított modell tulajdonságának elérésével nyerje ki a Model
tanult modellparamétereket. Az előre betanított modell a lineáris regressziós modell OnlineGradientDescentTrainer
használatával lett betanítve , amely létrehoz egy RegressionPredictionTransformer
kimenetet LinearRegressionModelParameters
. Ezek a modellparaméterek a modell tanult torzításait és súlyait vagy együtthatóit tartalmazzák. Ezek az értékek az új újratanított modell kiindulópontjaként szolgálnak.
// Extract trained model parameters
LinearRegressionModelParameters originalModelParameters =
((ISingleFeaturePredictionTransformer<object>)trainedModel).Model as LinearRegressionModelParameters;
Feljegyzés
A modellparaméterek kimenete a használt algoritmustól függ. Például OnlineGradientDescentTrainer
az LbfgsMaximumEntropyMulticlassTrainer kimeneteket MaximumEntropyModelParameters
használjaLinearRegressionModelParameters
. Modellparaméterek kinyerésekor a megfelelő típusra kell leadni.
Modell újratanítása
A modell újratanításának folyamata nem különbözik a modell betanítási folyamatától. Az egyetlen különbség az, hogy az adatokon kívül a Fit
metódus az eredeti tanult modellparamétereket is bemenetként használja, és az újratanítási folyamat kiindulópontjaként használja őket.
// 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);
Ezen a ponton mentheti az újratanított modellt, és használhatja az alkalmazásban. További információkért tekintse meg a betanított modellek mentését és betöltését, valamint az előrejelzések betanított modellvezetőkkel való megjelenítését.
Modellparaméterek összehasonlítása
Honnan tudja, hogy az újratanítás valóban megtörtént-e? Ennek egyik módja az lenne, ha összehasonlítanánk, hogy az újratanított modell paraméterei eltérnek-e az eredeti modell paramétereiétől. Az alábbi kódminta összehasonlítja az eredetit az újratanított modell súlyával, és a konzolon adja ki őket.
// 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]}");
}
Az alábbi táblázat a kimenet megjelenését mutatja be.
Eredeti | Újratanított | Eltérés |
---|---|---|
33039.86 | 56293.76 | -23253.9 |
29099.14 | 49586.03 | -20486.89 |
28938.38 | 48609.23 | -19670.85 |
30484.02 | 53745.43 | -23261.41 |