Betanított modellek mentése és betöltése
Megtudhatja, hogyan mentheti és töltheti be a betanított modelleket az alkalmazásban.
A modellkészítési folyamat során a modell a memóriában él, és az alkalmazás teljes életciklusa alatt elérhető. Ha azonban az alkalmazás nem fut, a modell helyi vagy távoli mentése nem lesz elérhető. A modelleket általában egy bizonyos ponton használják más alkalmazásokban való betanítás után, következtetés vagy újratanítás céljából. Ezért fontos a modell tárolása. Mentse és töltse be a modelleket a dokumentum következő szakaszaiban ismertetett lépésekkel adatelőkészítési és modellbetanítási folyamatok használatakor, mint az alább részletezett. Bár ez a minta lineáris regressziós modellt használ, ugyanez a folyamat más ML.NET algoritmusokra is vonatkozik.
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");
Mivel a legtöbb modell és adat-előkészítési folyamat ugyanabból az osztálykészletből öröklődik, az összetevők mentési és betöltési metódusa ugyanaz. A használati esettől függően kombinálhatja az adat-előkészítési folyamatot és a modellt egyetlen EstimatorChain
, egyetlen ITransformer
kimenetet eredményező vagy különálló modellbe, így mindegyikhez külön-külön ITransformer
jön létre.
Modell helyi mentése
Modell mentésekor két dologra van szükség:
- A
ITransformer
modell. ITransformer
ADataViewSchema
várt bemenet.
A modell betanítása után a Save
metódussal mentse a betanított modellt a bemeneti adatok használatával DataViewSchema
hívott model.zip
fájlba.
// Save Trained Model
mlContext.Model.Save(trainedModel, data.Schema, "model.zip");
ONNX-modell helyi mentése
A modell ONNX-verziójának helyi mentéséhez telepítve kell lennie a Microsoft.ML.OnnxConverter NuGet csomagnak.
OnnxConverter
A csomag telepítve van, és ezzel menthetjük a modellt ONNX formátumban. Ehhez olyan Stream
objektumra van szükség, amelyet a File.Create
metódus használatával adhatunk megFileStream
. A File.Create
metódus egy sztringet vesz fel paraméterként, amely az ONNX-modell elérési útja lesz.
using FileStream stream = File.Create("./onnx_model.onnx");
A stream létrehozásával meghívhatjuk a ConvertToOnnx
metódust, és átadhatjuk neki a betanított modellt, a modell betanítása során használt adatokat és a streamet. Azonban nem minden oktató és transzformátor exportálható az ONNX-be. A teljes listát az Átalakítások és a ML.NET algoritmus kiválasztása útmutatókban találja.
mlContext.Model.ConvertToOnnx(trainedModel, data, stream);
Helyileg tárolt modell betöltése
A helyileg tárolt modellek más folyamatokban vagy alkalmazásokban is használhatók, például ASP.NET Core
és Serverless Web Applications
. További információ: ML.NET használata a Web API-ban és ML.NET kiszolgáló nélküli webalkalmazás üzembe helyezése – útmutató cikkek.
Egy külön alkalmazásban vagy folyamatban használja a Load
metódust és a fájl elérési útját a betanított modell alkalmazásba való beolvasásához.
//Define DataViewSchema for data preparation pipeline and trained model
DataViewSchema modelSchema;
// Load trained model
ITransformer trainedModel = mlContext.Model.Load("model.zip", out modelSchema);
ONNX-modell helyi betöltése
Ha egy ONNX-modellbe szeretne betöltődni az előrejelzésekhez, szüksége lesz a Microsoft.ML.OnnxTransformer NuGet csomagra.
OnnxTransformer
A csomag telepítésével betölthet egy meglévő ONNX-modellt a ApplyOnnxModel
módszerrel. A szükséges paraméter egy sztring, amely a helyi ONNX-modell elérési útja.
OnnxScoringEstimator estimator = mlContext.Transforms.ApplyOnnxModel("./onnx_model.onnx");
A ApplyOnnxModel
metódus egy objektumot OnnxScoringEstimator
ad vissza. Először be kell töltenünk az új adatokat.
HousingData[] newHousingData = new HousingData[]
{
new()
{
Size = 1000f,
HistoricalPrices = new[] { 300_000f, 350_000f, 450_000f },
CurrentPrice = 550_00f
}
};
Az új adatokkal betölthetjük azokat egy IDataView
LoadFromEnumerable
metódusba.
IDataView newHousingDataView = mlContext.Data.LoadFromEnumerable(newHousingData);
Most már az új IDataView
adatokkal is elférünk az új adatokon.
estimator.Fit(newHousingDataView);
Miután a Fit metódust egy becslőn ApplyOnnxModel
használta, az új modellként menthető a helyi mentési szakaszban említett Save metódussal.
Távolról tárolt modell betöltése
Ha távoli helyen tárolt adatelőkészítési folyamatokat és modelleket szeretne betölteni az alkalmazásba, használja Stream
a Load
metódus fájlelérési útvonala helyett.
// 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);
}
Különálló adatelőkészítési és modellfolyamatok használata
Feljegyzés
A különálló adatelőkészítési és modellbetanítási folyamatok használata nem kötelező. A folyamatok elkülönítése megkönnyíti a tanult modellparaméterek vizsgálatát. Az előrejelzésekhez egyszerűbb egyetlen folyamatot menteni és betölteni, amely tartalmazza az adat-előkészítési és modellbetanítási műveleteket.
Ha külön adatelőkészítési folyamatokkal és modellekkel dolgozik, ugyanaz a folyamat érvényes, mint az önálló folyamatokra; kivéve, hogy mindkét folyamatot egyszerre kell menteni és betölteni.
Külön adatelőkészítési és modellbetanítási folyamatok:
// 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);
Adatelőkészítési folyamat és betanított modell mentése
Az adatelőkészítési folyamat és a betanított modell mentéséhez használja az alábbi parancsokat:
// 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");
Adatelőkészítési folyamat és betanított modell betöltése
Egy külön folyamatban vagy alkalmazásban egyszerre töltse be az adat-előkészítési folyamatot és a betanított modellt az alábbiak szerint:
// 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);
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: