Eğitilen modelleri kaydetme ve yükleme

Uygulamanıza eğitilmiş modelleri kaydetmeyi ve yüklemeyi öğrenin.

Model geliştirme süreci boyunca bir model bellekte yer almaktadır ve uygulamanın yaşam döngüsü boyunca erişilebilir. Ancak uygulamanın çalışmama süresi sona ede, model yerel veya uzaktan bir yere kaydedilmeyecekse artık erişilebilir olmaz. Modeller genellikle çıkarım veya yeniden eğitim için diğer uygulamalarda eğitimden sonra bir noktada kullanılır. Bu nedenle modeli depolamak önemlidir. Aşağıda açıklandığı gibi veri hazırlama ve model eğitim işlem hatlarını kullanırken bu belgenin sonraki bölümlerinde açıklanan adımları kullanarak modelleri kaydedin ve yükleyebilirsiniz. Bu örnek doğrusal regresyon modeli kullanıyor olsa da, aynı işlem diğer ML.NET algoritmaları için de geçerlidir.

HousingData[] housingData = new HousingData[]
{
    new HousingData
    {
        Size = 600f,
        HistoricalPrices = new float[] { 100000f, 125000f, 122000f },
        CurrentPrice = 170000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 200000f, 250000f, 230000f },
        CurrentPrice = 225000f
    },
    new HousingData
    {
        Size = 1000f,
        HistoricalPrices = new float[] { 126000f, 130000f, 200000f },
        CurrentPrice = 195000f
    }
};

// Create MLContext
MLContext mlContext = new MLContext();

// Load Data
IDataView data = mlContext.Data.LoadFromEnumerable<HousingData>(housingData);

// Define data preparation estimator
EstimatorChain<RegressionPredictionTransformer<LinearRegressionModelParameters>> pipelineEstimator =
    mlContext.Transforms.Concatenate("Features", new string[] { "Size", "HistoricalPrices" })
        .Append(mlContext.Transforms.NormalizeMinMax("Features"))
        .Append(mlContext.Regression.Trainers.Sdca());

// Train model
ITransformer trainedModel = pipelineEstimator.Fit(data);

// Save model
mlContext.Model.Save(trainedModel, data.Schema, "model.zip");

Modellerin ve veri hazırlama işlem hatlarının çoğu aynı sınıf kümesinden devralınarak bu bileşenler için kaydetme ve yükleme yöntemi imzaları aynıdır. Kullanım örneğine bağlı olarak, veri hazırlama işlem hattını ve modeli tek bir işlem hattında birleştirebilirsiniz. Bu işlem hattı tek bir çıkış oluşturur veya bunları ayırarak her biri için EstimatorChain ITransformer ayrı bir ITransformer oluşturur.

Modeli yerel olarak kaydetme

Modeli kaydeden iki şey gerekir:

  1. ITransformerModelin.
  2. DataViewSchema'nin ITransformer beklenen girişinin değeri.

Modeli eğitdikten sonra yöntemini kullanarak eğitilen modeli giriş verilerini Save kullanarak adlı dosyaya model.zip DataViewSchema kaydedin.

// Save Trained Model
mlContext.Model.Save(trainedModel, data.Schema, "model.zip");

Yerel olarak depolanan bir modeli yükleme

Yerel olarak depolanan modeller, ve gibi diğer işlemlerde veya uygulamalarda ASP.NET Core Serverless Web Applications kullanılabilir. Daha fazla bilgi için ML.NET'i Web API'de kullanma ve ML.NET Sunucusuz Web Uygulaması dağıtma makalelerini okuyun.

Eğitilen modeli uygulamanıza almak için ayrı bir uygulamada veya Load işlemde dosya yoluyla birlikte yöntemini kullanın.

//Define DataViewSchema for data preparation pipeline and trained model
DataViewSchema modelSchema;

// Load trained model
ITransformer trainedModel = mlContext.Model.Load("model.zip", out modelSchema);

Uzaktan depolanan bir modeli yükleme

Uygulamanıza uzak bir konumda depolanan veri hazırlama işlem hatlarını ve modellerini yüklemek için yönteminde dosya Stream yolu yerine Load kullanın.

// Create MLContext
MLContext mlContext = new MLContext();

// Define DataViewSchema and ITransformers
DataViewSchema modelSchema;
ITransformer trainedModel;

// Load data prep pipeline and trained model
using (HttpClient client = new HttpClient())
{
    Stream modelFile = await client.GetStreamAsync("<YOUR-REMOTE-FILE-LOCATION>");

    trainedModel = mlContext.Model.Load(modelFile, out modelSchema);
}

Ayrı veri hazırlama ve model işlem hatlarıyla çalışma

Not

Ayrı veri hazırlama ve model eğitim işlem hatlarıyla çalışmak isteğe bağlıdır. İşlem hatlarının ayrılması, öğrenilen model parametrelerini incelemeyi kolaylaştırır. Tahminler için veri hazırlama ve model eğitim işlemlerini içeren tek bir işlem hattını kaydetmek ve yüklemek daha kolaydır.

Ayrı veri hazırlama işlem hatları ve modellerle çalışırken, tek işlem hatlarıyla aynı işlem geçerlidir; ancak şimdi her iki işlem hattının da aynı anda kaydedilebilir ve yükleniyor olması gerekir.

Ayrı veri hazırlama ve model eğitim işlem hatları verildi:

// Define data preparation estimator
IEstimator<ITransformer> dataPrepEstimator =
    mlContext.Transforms.Concatenate("Features", new string[] { "Size", "HistoricalPrices" })
        .Append(mlContext.Transforms.NormalizeMinMax("Features"));

// Create data preparation transformer
ITransformer dataPrepTransformer = dataPrepEstimator.Fit(data);

// Define StochasticDualCoordinateAscent regression algorithm estimator
var sdcaEstimator = mlContext.Regression.Trainers.Sdca();

// Pre-process data using data prep operations
IDataView transformedData = dataPrepTransformer.Transform(data);

// Train regression model
RegressionPredictionTransformer<LinearRegressionModelParameters> trainedModel = sdcaEstimator.Fit(transformedData);

Veri hazırlama işlem hattını ve eğitilen modeli kaydetme

Hem veri hazırlama işlem hattını hem de eğitilen modeli kaydetmek için aşağıdaki komutları kullanın:

// Save Data Prep transformer
mlContext.Model.Save(dataPrepTransformer, data.Schema, "data_preparation_pipeline.zip");

// Save Trained Model
mlContext.Model.Save(trainedModel, transformedData.Schema, "model.zip");

Veri hazırlama işlem hattını ve eğitilen modeli yükleme

Ayrı bir işlemde veya uygulamada, veri hazırlama işlem hattını ve eğitilen modeli aynı anda aşağıdaki gibi yükleyebilirsiniz:

// Create MLContext
MLContext mlContext = new MLContext();

// Define data preparation and trained model schemas
DataViewSchema dataPrepPipelineSchema, modelSchema;

// Load data preparation pipeline and trained model
ITransformer dataPrepPipeline = mlContext.Model.Load("data_preparation_pipeline.zip",out dataPrepPipelineSchema);
ITransformer trainedModel = mlContext.Model.Load("model.zip", out modelSchema);