public static void PredictIssue() { // <SnippetLoadModel> ITransformer loadedModel; using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { loadedModel = _mlContext.Model.Load(stream); } // </SnippetLoadModel> // <SnippetAddTestIssue> GitHubIssue singleIssue = new GitHubIssue() { Title = "Entity Framework crashes", Description = "When connecting to the database, EF is crashing" }; // </SnippetAddTestIssue> //Predict label for single hard-coded issue // <SnippetCreatePredictionEngine> _predEngine = loadedModel.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_mlContext); // </SnippetCreatePredictionEngine> // <SnippetPredictIssue> var prediction = _predEngine.Predict(singleIssue); // </SnippetPredictIssue> // <SnippetDisplayResults> Console.WriteLine($"=============== Single Prediction - Result: {prediction.Area} ==============="); // </SnippetDisplayResults> }
public static IEstimator <ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator <ITransformer> pipeline) { // STEP 3: Create the training algorithm/trainer // Use the multi-class SDCA algorithm to predict the label using features. //Set the trainer/algorithm and map label to value (original readable state) var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features")) .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); Console.WriteLine($"=============== Training the model ==============="); _trainedModel = trainingPipeline.Fit(trainingDataView); Console.WriteLine($"=============== Finished Training the model Ending time: {DateTime.Now:O} ==============="); // (OPTIONAL) Try/test a single prediction with the "just-trained model" (Before saving the model) Console.WriteLine($"=============== Single Prediction just-trained-model ==============="); // Create prediction engine related to the loaded trained model _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_trainedModel); var issue = new GitHubIssue { Title = "WebSockets communication is slow in my machine", Description = "The WebSockets communication used under the covers by SignalR looks like is going slow in my development machine.." }; var prediction = _predEngine.Predict(issue); Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.Area} ==============="); return(trainingPipeline); }
//STEP 6 : Deploy and Predict with a model private static void PredictIssue() { // <SnippetLoadModel> ITransformer loadedModel = _mlContext.Model.Load(_modelPath, out var modelInputSchema); // </SnippetLoadModel> // <SnippetAddTestIssue> GitHubIssue singleIssue = new GitHubIssue() { Title = "Entity Framework crashes", Description = "When connecting to the database, EF is crashing" }; // </SnippetAddTestIssue> //Predict label for single hard-coded issue // <SnippetCreatePredictionEngine> _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(loadedModel); // </SnippetCreatePredictionEngine> // <SnippetPredictIssue> var prediction = _predEngine.Predict(singleIssue); // </SnippetPredictIssue> // <SnippetDisplayResults> Console.WriteLine($"=============== Single Prediction - Result: {prediction.Area} ==============="); // </SnippetDisplayResults> }
static void Main(String[] args) { Console.WriteLine("Hello World!"); var config = new TrainerConfig { TrainDataPath = Path.Combine(AppContext.BaseDirectory, "Data", "issues_train.tsv"), TestDataPath = Path.Combine(AppContext.BaseDirectory, "Data", "issues_test.tsv"), ModelPath = Path.Combine(AppContext.BaseDirectory, "Models", "github_issues.zip"), Label = "Area", }.WithFeature("Title").WithFeature("Description"); var trainer = new Trainer <GitHubIssue, IssuePrediction>(config); Console.WriteLine("Training..."); var model = trainer.TrainOrLoad(); Console.WriteLine("Training...done!"); Console.WriteLine("Evaluating..."); trainer.Evaluate(); Console.WriteLine("Evaluating...done!"); trainer.Save(); var issue = new GitHubIssue() { Title = "WebSockets communication is slow in my machine", Description = "The WebSockets communication used under the covers by SignalR looks like is going slow in my development machine.." }; var prediction = trainer.Predict(issue); Console.WriteLine($"The prediciton is...{prediction.Area}!"); Console.ReadLine(); }
public static EstimatorChain <KeyToValueMappingTransformer> BuildAndTrainModel(IDataView trainingDataView, EstimatorChain <ITransformer> pipeline) { // STEP 3: Create the training algorithm/trainer // Use the multi-class SDCA model to predict the label using features. // <SnippetSdcaMultiClassTrainer> var trainer = new SdcaMultiClassTrainer(_mlContext, DefaultColumnNames.Label, DefaultColumnNames.Features); // </SnippetSdcaMultiClassTrainer> //Set the trainer/algorithm and map label to value (original readable state) // <SnippetAddTrainer> var trainingPipeline = pipeline.Append(trainer) .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); // </SnippetAddTrainer> // STEP 4: Train the model fitting to the DataSet Console.WriteLine($"=============== Training the model ==============="); // <SnippetTrainModel> _trainedModel = trainingPipeline.Fit(trainingDataView); // </SnippetTrainModel> Console.WriteLine($"=============== Finished Training the model Ending time: {DateTime.Now.ToString()} ==============="); // (OPTIONAL) Try/test a single prediction with the "just-trained model" (Before saving the model) Console.WriteLine($"=============== Single Prediction just-trained-model ==============="); // Create prediction engine related to the loaded trained model // <SnippetCreatePredictionEngine> _predEngine = _trainedModel.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_mlContext); // </SnippetCreatePredictionEngine> // <SnippetCreateTestIssue1> GitHubIssue issue = new GitHubIssue() { Title = "WebSockets communication is slow in my machine", Description = "The WebSockets communication used under the covers by SignalR looks like is going slow in my development machine.." }; // </SnippetCreateTestIssue1> // <SnippetPredict> var prediction = _predEngine.Predict(issue); // </SnippetPredict> // <SnippetOutputPrediction> Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.Area} ==============="); // </SnippetOutputPrediction> // Save the new model to .ZIP file // <SnippetCallSaveModel> SaveModelAsFile(_mlContext, _trainedModel); // </SnippetCallSaveModel> // <SnippetReturnModel> return(trainingPipeline); // </SnippetReturnModel> }
private static void PredictIssue() { var loadedModel = _mlContext.Model.Load(_modelPath, out var modelInputSchema); var singleIssue = new GitHubIssue() { Title = "Entity Framework crashes", Description = "When connecting to the databese, EF is crashing" }; _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(loadedModel); var prediction = _predEngine.Predict(singleIssue); Console.WriteLine($"=============== Single Prediction - Result: {prediction.Area} ==============="); }
private static void PredictIssue() { ITransformer loadedModel; using (var stream = new FileStream(_modelPath, FileMode.Open, FileAccess.Read, FileShare.Read)) { loadedModel = _mlContext.Model.Load(stream); } GitHubIssue singleIssue = new GitHubIssue() { Title = "Entity Framework crashes", Description = "When connecting to the database, EF is crashing" }; _predEngine = loadedModel.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_mlContext); var prediction = _predEngine.Predict(singleIssue); Console.WriteLine($"=============== Single Prediction - Result: {prediction.Area} ==============="); }
public static IEstimator <ITransformer> BuildAndTrainModel(IDataView trainingDataView, IEstimator <ITransformer> pipeline) { var trainingPipeline = pipeline.Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features")) .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); _trainedModel = trainingPipeline.Fit(trainingDataView); _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_trainedModel); GitHubIssue issue = new GitHubIssue() { Title = "WebSockets communication is slow in my machine", Description = "The WebSckets ommunication used under the covers by SignalR looks like is going slow in my development machine.." }; var prediction = _predEngine.Predict(issue); Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.Area} ==============="); return(trainingPipeline); }
/// <summary> /// 使用神经网络模型预测问题分类 /// </summary> /// <param name="mlContext"></param> /// <param name="model"></param> private static void Predict(MLContext mlContext, ITransformer model) { // 创建预测引擎 Helper.PrintLine("创建预测引擎..."); var engine = mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(model); (string Title, string Description, bool Exit)inputs; while (!(inputs = GetInputs()).Exit) { var issue = new GitHubIssue() { Title = inputs.Title, Description = inputs.Description }; var prediction = engine.Predict(issue); Helper.PrintLine($"=> {prediction.Area}"); } Console.ResetColor(); Helper.PrintLine("结束预测"); (string Title, string Description, bool Exit) GetInputs() { Console.ResetColor(); Helper.PrintLine("输入问题标题以预测问题分类 (输入 exit 跳出预测):"); Console.Write(">>>\t请输入:"); Console.ForegroundColor = ConsoleColor.Yellow; var title = Console.ReadLine(); if (title.ToLower() == "exit") { return(title, string.Empty, true); } Console.ResetColor(); Helper.PrintLine("输入问题描述以预测问题分类:"); Console.Write(">>>\t请输入:"); Console.ForegroundColor = ConsoleColor.Yellow; var description = Console.ReadLine(); Console.ForegroundColor = ConsoleColor.Magenta; return(title, description, false); } }
static void Main(string[] args) { _mlContext = new MLContext(seed: 0); // Prepare Data _trainingDataView = _mlContext.Data.LoadFromTextFile <GitHubIssue>(_trainDataPath, hasHeader: true); // Prepare Pipeline var pipeline = _mlContext.Transforms.Conversion.MapValueToKey(inputColumnName: "Area", outputColumnName: "Label") .Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Title", outputColumnName: "TitleFeaturized")) .Append(_mlContext.Transforms.Text.FeaturizeText(inputColumnName: "Description", outputColumnName: "DescriptionFeaturized")) .Append(_mlContext.Transforms.Concatenate("Features", "TitleFeaturized", "DescriptionFeaturized")) .AppendCacheCheckpoint(_mlContext) .Append(_mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy("Label", "Features", maximumNumberOfIterations: 1000)) .Append(_mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); // Training Model _trainedModel = pipeline.Fit(_trainingDataView); // Single Prediction _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(_trainedModel); GitHubIssue issue = new GitHubIssue() { Title = "WebSockets communication is slow in my machine", Description = "The WebSockets communication used under the covers by SignalR looks like is going slow in my development machine.." }; var prediction = _predEngine.Predict(issue); Console.WriteLine($"=============== Single Prediction just-trained-model - Result: {prediction.Area}==============="); // Evaluate var testDataView = _mlContext.Data.LoadFromTextFile <GitHubIssue>(_testDataPath, hasHeader: true); var testMetrics = _mlContext.MulticlassClassification.Evaluate(_trainedModel.Transform(testDataView)); Console.WriteLine($"*************************************************************************************************************"); Console.WriteLine($"* Metrics for Multi-class Classification model - Test Data "); Console.WriteLine($"*----------------------------------------------------------------------------------------------------------- - "); Console.WriteLine($"* MicroAccuracy: {testMetrics.MicroAccuracy:0.###}"); Console.WriteLine($"* MacroAccuracy: {testMetrics.MacroAccuracy:0.###}"); Console.WriteLine($"* LogLoss: {testMetrics.LogLoss:#.###}"); Console.WriteLine($"* LogLossReduction: {testMetrics.LogLossReduction:#.###}"); Console.WriteLine($"*************************************************************************************************************"); // Save Model _mlContext.Model.Save(_trainedModel, _trainingDataView.Schema, _modelPath); // Predict Issue ITransformer loadedModel = _mlContext.Model.Load(_modelPath, out var modelInputSchema); GitHubIssue singleIssue = new GitHubIssue() { //Title = "socket 중계 서버..", //Description = "오랜만에 질문 올립니다. tcp socket 중계 서버를 만들어야 하는데요.. 간단하게 얘기하면 n개의 장비가 있고 n개의 컨트롤 시스템이 존재 각 장비는 지정 컨트롤 시스템과 정보 송/수신. 말하자면 1:1의 양방향 통신이 n개가 관리 가능해야 한다는 얘긴데 . socket.poll, threadPool.. 등등... 뭘 어찌 구현할지 좀 감이 안오네요. 비슷한 구현 해보신 분 힌트좀 주세요..." Title = "오랜만에 송년회 어떠세요?", Description = "참석하고 싶은 마음이 불처럼 타오르는 분들 계신가요!!!!" }; _predEngine = _mlContext.Model.CreatePredictionEngine <GitHubIssue, IssuePrediction>(loadedModel); var prediction2 = _predEngine.Predict(singleIssue); Console.WriteLine($"=============== Single Prediction - Result: {prediction2.Area} ==============="); }