Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Saiba como treinar novamente um modelo de machine learning em ML.NET.
O mundo e seus dados mudam constantemente. Dessa forma, os modelos também precisam ser alterados e atualizados. ML.NET fornece funcionalidade para treinar novamente modelos usando parâmetros de modelo aprendidos como ponto de partida para criar continuamente a experiência anterior em vez de começar do zero todas as vezes.
Os algoritmos a seguir são retreináveis em ML.NET:
- AveragedPerceptronTrainer
- FieldAwareFactorizationMachineTrainer
- LbfgsLogisticRegressionBinaryTrainer
- LbfgsMaximumEntropyMulticlassTrainer
- LbfgsPoissonRegressionTrainer
- LinearSvmTrainer
- OnlineGradientDescentTrainer
- SgdCalibratedTrainer
- SgdNonCalibratedTrainer
- SymbolicSgdLogisticRegressionBinaryTrainer
Carregar modelo pré-treinado
Importante
Carregue apenas modelos de fontes confiáveis. Carregar modelos de fontes não confiáveis é um risco à segurança.
Primeiro, carregue o modelo pré-treinado em seu aplicativo. Saiba mais sobre: Para saber mais sobre o carregamento de pipelines e modelos de treinamento, consulte Salvar e carregar um modelo treinado.
// 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);
Extrair parâmetros de modelo pré-treinado
Depois que o modelo for carregado, extraia os parâmetros de modelo aprendidos acessando a Model propriedade do modelo pré-treinado. O modelo pré-treinado foi treinado usando o modelo de regressão linear OnlineGradientDescentTrainer, que cria uma RegressionPredictionTransformer que gera LinearRegressionModelParameters. Esses parâmetros de modelo contêm o viés aprendido e os pesos ou coeficientes do modelo. Esses valores são usados como ponto de partida para o novo modelo retreinado.
// Extract trained model parameters
LinearRegressionModelParameters originalModelParameters =
((ISingleFeaturePredictionTransformer<object>)trainedModel).Model as LinearRegressionModelParameters;
Note
A saída dos parâmetros de modelo depende do algoritmo usado. Por exemplo, OnlineGradientDescentTrainer usa LinearRegressionModelParameters, enquanto LbfgsMaximumEntropyMulticlassTrainer gera MaximumEntropyModelParameters. Ao extrair parâmetros do modelo, faça a conversão para o tipo apropriado.
Treinar novamente um modelo
O processo de readaptação de um modelo não é diferente do treinamento de um modelo. A única diferença é que você passa um argumento adicional para o Fit(IDataView, LinearModelParameters) método: os parâmetros de modelo aprendidos originais.
Fit() usa-os como ponto de partida no processo de retreino.
// 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);
Nesse ponto, você pode salvar seu modelo treinado novamente e usá-lo em seu aplicativo. Para obter mais informações, consulte Salvar e carregar um modelo treinado e fazer previsões com um modelo treinado.
Comparar parâmetros de modelo
Como você sabe se o retreinamento realmente aconteceu? Uma maneira é comparar se os parâmetros do modelo retreinado são diferentes dos do modelo original. O exemplo de código a seguir compara o original com os pesos do modelo treinado novamente e os envia para o 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]}");
}
A tabela a seguir mostra como a saída pode ser.
| Original | Retreinado | Diferença |
|---|---|---|
| 33039.86 | 56293.76 | -23253.9 |
| 29099.14 | 49586.03 | -20486.89 |
| 28938,38 | 48609.23 | -19670.85 |
| 30484.02 | 53745.43 | -23261.41 |