© Optinik/Shutterstock.com
Machine Learning 101 mit ML.NET - Teil 3

Einsatz eines Machine-Learning-Modells


Der dritte und letzte Teil unserer Artikelserie zu Machine Learning mit ML.NET behandelt den praktischen Einsatz eines ML-Modells. Es wird gezeigt, wie TensorFlow- und ONNX-Modelle z. B. zur Bildklassifizierung mit Hilfe von Deep Learning verwendet werden können.

Wenn wir uns nochmals in Erinnerung rufen, was wir in dieser Serie behandelt haben, ist es offensichtlich, dass beim Aufbau eines ML-Modells die Trainerauswahl nicht der schwierigste Teil ist. AutoML ist dazu in der Lage, eine Liste mit den besten ML-Modellen vorzuschlagen und die Evaluationsmetriken, die jedes Modell begleiten, dabei zu berücksichtigen. Viel komplexer – und zeitaufwendiger – ist die Datenaufbereitung, die zusammen mit der Trainings-Pipeline ein Modell erstellt, das in der Lage ist, Vorhersagen zu treffen.

Nun, da wir ein Machine-Learning-Modell erstellt haben, sind wir bereit, es einzusetzen und Daten vorherzusagen (Listing 1).

Listing 1

var sampleData = new ModelInput { Luminosity = lux, Temperature = temp, Infrared = infra, CreatedAt = DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"), Distance = 0 }; var predictor = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(model); var predicted = predictor.Predict(sampleData); Console.WriteLine(predicted.PredictedLabel); Console.WriteLine(predicted.Score);

Ob wir das Modell nun gerade erstellt oder von einer zuvor gespeicherten Datei geladen haben: wir müssen nur noch ein PredictionEngine-Objekt instanziieren. Dazu verwenden wir CreatePredictionEngine und rufen darauf die Predict-Methode auf. Somit gelangen wir zum PredictedLabel mitsamt seines Scores.

Das Modell im Enterprise-Szenario verwenden

Die zuvor genannte Methode für Vorhersagen eignet sich gut für simple Szenarien wie Konsolenanwendungen; aber was passiert, wenn wir es für ein komplexeres Szenario hochskalieren wollen, z. B. für Webanwendungen, wenn wir womöglich viele PredictionEngine-Objekte erstellen und zerstören müssen? Unser erster Impuls für Multithreading-Szenarien (Abb. 1) wie Webanwendungen unter Verwendung von HTTP oder WebSockets wäre, ein Singleton für das PredictionEngine-Objekt zu erstellen, aber da es nicht thread-safe ist, kann das die Funktionalität verhindern. Daher benötigen wir einen komplexeren Ansatz.

Das NuGet-Paket Microsoft.Extensions.ML bietet ein Objekt namens PredictionEnginePool. Es hält einen Pool an initialisierten PredictionEngine-Objekten bereit, die sofort verwendet werden können.

costea_mlnet_teil3_1.tif_fmt1.jpgAbb. 1: Multithreading-Szenario

Um die Pool-Obje...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang