Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Informazioni su come ripetere il training di un modello di Machine Learning in ML.NET.
Il mondo e i relativi dati cambiano costantemente. Di conseguenza, anche i modelli devono cambiare e aggiornare. ML.NET fornisce funzionalità per ripetere il training dei modelli usando parametri del modello appresi come punto di partenza per creare continuamente esperienza precedente anziché iniziare da zero ogni volta.
Gli algoritmi seguenti sono riabilitabili in ML.NET:
- AveragedPerceptronTrainer
- FieldAwareFactorizationMachineTrainer
- LbfgsLogisticRegressionBinaryTrainer
- LbfgsMaximumEntropyMulticlassTrainer
- LbfgsPoissonRegressionTrainer
- LinearSvmTrainer
- OnlineGradientDescentTrainer
- SgdCalibratedTrainer
- SgdNonCalibratedTrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
Caricare un modello preaddestrato
Important
Carica solo i modelli da origini attendibili. Il caricamento di modelli da origini non attendibili è un rischio per la sicurezza.
Per prima cosa, carica il modello preaddestrato nella tua applicazione. Per altre informazioni sul caricamento di pipeline e modelli di training, vedere Salvare e caricare un modello sottoposto a training.
// 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);
Estrarre i parametri del modello preaddestrato
Dopo aver caricato il modello, estrarre i parametri appresi del modello accedendo alla proprietà Model del modello preaddestrato. Il modello preaddestrato è stato addestrato usando il modello di regressione lineare OnlineGradientDescentTrainer, che genera un oggetto RegressionPredictionTransformer che restituisce LinearRegressionModelParameters. Questi parametri del modello contengono le distorsioni apprese e i pesi o i coefficienti del modello. Questi valori vengono usati come punto di partenza per il nuovo modello sottoposto a training.
// Extract trained model parameters
LinearRegressionModelParameters originalModelParameters =
((ISingleFeaturePredictionTransformer<object>)trainedModel).Model as LinearRegressionModelParameters;
Note
L'output dei parametri del modello dipende dall'algoritmo usato. Ad esempio OnlineGradientDescentTrainer usa LinearRegressionModelParameters, mentre LbfgsMaximumEntropyMulticlassTrainer restituisce MaximumEntropyModelParameters. Quando si estraggono i parametri del modello, effettuare il cast al tipo appropriato.
Nuovo training di un modello
Il processo di riaddestramento di un modello non è diverso da quello per addestrare un modello. L'unica differenza è che si passa un argomento aggiuntivo al Fit(IDataView, LinearModelParameters) metodo : i parametri del modello appreso originali.
Fit() li utilizza come punto di partenza nel processo di riaddestramento.
// 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);
A questo punto, è possibile salvare il modello riaddestrato e utilizzarlo nella propria applicazione. Per ulteriori informazioni, vedere Salvare e caricare un modello addestrato e Effettuare previsioni con un modello addestrato.
Confrontare i parametri del modello
Come si fa a sapere se il riaddestramento è effettivamente avvenuto? Un modo consiste nel verificare se i parametri del modello riaddestrato sono diversi da quelli del modello originale. L'esempio di codice seguente confronta i pesi originali con quelli del modello riaddestrato e li stampa nella console.
// 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]}");
}
La tabella seguente mostra come potrebbe apparire l'output.
| Originale | Riaddestrato | Differenza |
|---|---|---|
| 33039.86 | 56293.76 | -23253.9 |
| 29099.14 | 49586.03 | -20486.89 |
| 28938,38 | 48609.23 | -19670.85 |
| 30484.02 | 53745.43 | -23261.41 |