Eğitilen modelleri kaydetme ve yükleme
Uygulamanıza eğitilmiş modelleri kaydetmeyi ve yüklemeyi öğrenin.
Model oluşturma işlemi boyunca model bellekte yer alır ve uygulamanın yaşam döngüsü boyunca erişilebilir. Ancak uygulama çalışmayı durdurduktan sonra model yerel olarak veya uzaktan bir yere kaydedilmediyse artık erişilebilir değildir. Modeller genellikle diğer uygulamalarda eğitimden sonra çıkarım veya yeniden eğitim için kullanılır. Bu nedenle modeli depolamak önemlidir. Aşağıda açıklanan 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ükleyin. Bu örnek doğrusal regresyon modeli kullansa 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");
Çoğu model ve veri hazırlama işlem hattı aynı sınıf kümesinden devraldığından, bu bileşenler için kaydetme ve yükleme yöntemi imzaları aynıdır. Kullanım örneğinize bağlı olarak, veri hazırlama işlem hattını ve modelini tek EstimatorChain
bir çıkış oluşturacak tek bir ITransformer
işlem hattında birleştirebilir veya bunları ayırarak her biri için ayrı ITransformer
bir tane oluşturabilirsiniz.
Modeli yerel olarak kaydetme
Modeli kaydederken iki şeye ihtiyacınız vardır:
- Modelin
ITransformer
modeli. - '
DataViewSchema
ninITransformer
beklenen girişi.
Modeli eğitdikten sonra, eğitilen modeli giriş verilerini kullanarak adlı model.zip
bir dosyaya DataViewSchema
kaydetmek için yöntemini kullanınSave
.
// Save Trained Model
mlContext.Model.Save(trainedModel, data.Schema, "model.zip");
ONNX modelini yerel olarak kaydetme
Modelinizin ONNX sürümünü yerel olarak kaydetmek için Microsoft.ML.OnnxConverter NuGet paketinin yüklü olması gerekir.
OnnxConverter
Paketi yükledikten sonra modelimizi ONNX biçiminde kaydetmek için kullanabiliriz. Bu, yöntemini kullanarak File.Create
sağlayabileceğiniz bir FileStream
nesne gerektirirStream
. yöntemi, File.Create
ONNX modelinin yolu olacak bir dizeyi parametre olarak alır.
using FileStream stream = File.Create("./onnx_model.onnx");
Akış oluşturulduktan sonra yöntemini çağırabilir ConvertToOnnx
ve eğitilen modeli, modeli eğitmek için kullanılan verileri ve akışı verebiliriz. Ancak tüm eğitmenler ve transformatörler ONNX'e aktarılamaz. Tam liste için Dönüşümler ve ML.NET Algoritması Seçme kılavuzlarını ziyaret edin.
mlContext.Model.ConvertToOnnx(trainedModel, data, stream);
Yerel olarak depolanan bir modeli yükleme
Yerel olarak depolanan modeller ve Serverless Web Applications
gibi ASP.NET Core
diğer işlemlerde veya uygulamalarda kullanılabilir. Daha fazla bilgi edinmek için bkz . Web API'sinde ML.NET kullanma ve Sunucusuz Web Uygulaması dağıtma ML.NET nasıl yapılır makaleleri.
Ayrı bir uygulama veya işlemde Load
, eğitilen modeli uygulamanıza almak için dosya yolu ile 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);
ONNX modelini yerel olarak yükleme
Tahminler için bir ONNX modeli yüklemek için Microsoft.ML.OnnxTransformer NuGet paketi gerekir.
OnnxTransformer
Paket yüklü olduğunda, yöntemini kullanarak ApplyOnnxModel
mevcut bir ONNX modelini yükleyebilirsiniz. Gerekli parametre, yerel ONNX modelinin yolu olan bir dizedir.
OnnxScoringEstimator estimator = mlContext.Transforms.ApplyOnnxModel("./onnx_model.onnx");
ApplyOnnxModel
yöntemi bir OnnxScoringEstimator
nesnesi döndürür. İlk olarak yeni verileri yüklemeliyiz.
HousingData[] newHousingData = new HousingData[]
{
new()
{
Size = 1000f,
HistoricalPrices = new[] { 300_000f, 350_000f, 450_000f },
CurrentPrice = 550_00f
}
};
Yeni verilerle yöntemini kullanarak LoadFromEnumerable
bunu bir IDataView
içine yükleyebiliriz.
IDataView newHousingDataView = mlContext.Data.LoadFromEnumerable(newHousingData);
Artık yeni IDataView
verileri sığdırmak için yeniyi kullanabiliriz.
estimator.Fit(newHousingDataView);
'den ApplyOnnxModel
bir tahmin aracında Sığdır yöntemi kullanıldıktan sonra, belirtilen Save yöntemiyle modeli yerel olarak kaydetme bölümü kullanılarak yeni bir model olarak kaydedilebilir.
Uzaktan depolanan bir modeli yükleme
Uzak bir konumda depolanan veri hazırlama işlem hatlarını ve modelleri uygulamanıza yüklemek için yönteminde Load
dosya yolu yerine bir kullanınStream
.
// 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ı ile çalışma
Not
Ayrı veri hazırlama ve model eğitim işlem hatları ile çalışma 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 modelleri ile çalışırken, tek işlem hatları ile aynı işlem uygulanır; ancak artık her iki işlem hattının da aynı anda kaydedilmesi ve yüklenmesi gerekir.
Ayrı veri hazırlama ve model eğitim işlem hatları verilmiştir:
// 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ğitilmiş modeli kaydetme
Hem veri hazırlama işlem hattını hem de eğitilmiş 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ğitilmiş modeli yükleme
Ayrı bir işlem veya uygulamada veri hazırlama işlem hattını ve eğitilen modeli aynı anda aşağıdaki gibi yükleyin:
// 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);
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin