当前位置: 首页 > news >正文

ML.NET(二) 使用机器学习预测表情分析

 这个例子使用模型进行表情分析:

准备数据: happy,sad 等;

using Common;
using ConsoleApp2;
using Microsoft.ML;
using Microsoft.ML.Data;
using System.Diagnostics;
using static Microsoft.ML.Transforms.ValueToKeyMappingEstimator;/** 训练一个Happy 和Sad 等表情的模型并使用预测  图像分类器(Image Classification) *  ***********************预测不是很准,数据集找对应人种数据可以尝试亚洲,欧美分开*/var projectDirectory = Path.GetFullPath(Path.Combine(AppContext.BaseDirectory, "./"));
var workspaceRelativePath = Path.Combine(projectDirectory, "workspace");
var assetsRelativePath = Path.Combine(projectDirectory, "assets");string outputMlNetModelFilePath = "model.zip";//Path.Combine("", "outputs", "imageClassifier.zip");
string imagesFolderPathForPredictions = Path.Combine("", "inputs", "test-images");
// 设置ML.NET环境
var mlContext = new MLContext();// 加载数据IEnumerable<ImageData> images = LoadImagesFromDirectory(folder: assetsRelativePath, useFolderNameAsLabel: true);
IDataView fullImagesDataset = mlContext.Data.LoadFromEnumerable(images);
IDataView shuffledFullImageFilePathsDataset = mlContext.Data.ShuffleRows(fullImagesDataset);// 3. Load Images with in-memory type within the IDataView and Transform Labels to Keys (Categorical)
IDataView shuffledFullImagesDataset = mlContext.Transforms.Conversion.MapValueToKey(outputColumnName: "LabelAsKey", inputColumnName: "Label", keyOrdinality: KeyOrdinality.ByValue).Append(mlContext.Transforms.LoadRawImageBytes(outputColumnName: "Image",imageFolder: assetsRelativePath,inputColumnName: "ImagePath")).Fit(shuffledFullImageFilePathsDataset).Transform(shuffledFullImageFilePathsDataset);// 4. Split the data 80:20 into train and test sets, train and evaluate.
var trainTestData = mlContext.Data.TrainTestSplit(shuffledFullImagesDataset, testFraction: 0.2);
IDataView trainDataView = trainTestData.TrainSet;
IDataView testDataView = trainTestData.TestSet;// 5. Define the model's training pipeline using DNN default values
//
var pipeline = mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image",labelColumnName: "LabelAsKey",validationSet: testDataView).Append(mlContext.Transforms.Conversion.MapKeyToValue(outputColumnName: "PredictedLabel",inputColumnName: "PredictedLabel"));
// Measuring training time
var watch = Stopwatch.StartNew();
Console.WriteLine($"--------------------开始训练-------------------------------");//6. Train
ITransformer trainedModel = pipeline.Fit(trainDataView);watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;Console.WriteLine($"--------------------训练用时: {elapsedMs / 1000} seconds --------------------");// 7. Get the quality metrics (accuracy, etc.)
EvaluateModel(mlContext, testDataView, trainedModel);8. Save the model to assets/outputs (You get ML.NET .zip model file and TensorFlow .pb model file)
mlContext.Model.Save(trainedModel, trainDataView.Schema, outputMlNetModelFilePath); //outputMlNetModelFilePath
Console.WriteLine($"Model saved to: {outputMlNetModelFilePath}");9. Try a single prediction simulating an end-user app
TrySinglePrediction(imagesFolderPathForPredictions, mlContext, trainedModel);static IEnumerable<ImageData> LoadImagesFromDirectory(string folder,bool useFolderNameAsLabel = true)=> FileUtils.LoadImagesFromDirectory(folder, useFolderNameAsLabel).Select(x => new ImageData(x.imagePath, x.label));static void EvaluateModel(MLContext mlContext, IDataView testDataset, ITransformer trainedModel)
{Console.WriteLine("Making predictions in bulk for evaluating model's quality...");// Measuring timevar watch = Stopwatch.StartNew();var predictionsDataView = trainedModel.Transform(testDataset);var metrics = mlContext.MulticlassClassification.Evaluate(predictionsDataView, labelColumnName: "LabelAsKey", predictedLabelColumnName: "PredictedLabel");ConsoleHelper.PrintMultiClassClassificationMetrics("TensorFlow DNN Transfer Learning", metrics);watch.Stop();var elapsed2Ms = watch.ElapsedMilliseconds;Console.WriteLine($"Predicting and Evaluation took: {elapsed2Ms / 1000} seconds");
}
static void TrySinglePrediction(string imagesFolderPathForPredictions, MLContext mlContext, ITransformer trainedModel)
{// Create prediction function to try one predictionvar predictionEngine = mlContext.Model.CreatePredictionEngine<InMemoryImageData, ImagePrediction>(trainedModel);var testImages = FileUtils.LoadInMemoryImagesFromDirectory(imagesFolderPathForPredictions, false);var imageToPredict = testImages.Last();var prediction = predictionEngine.Predict(imageToPredict);Console.WriteLine($"Image Filename : [{imageToPredict.ImageFileName}], " +$"Scores : [{string.Join(",", prediction.Score)}], " +$"Predicted Label : {prediction.PredictedLabel}");
}
// 定义数据结构
class ImageData
{public ImageData(string imagePath, string label){ImagePath = imagePath;Label = label;}public readonly string ImagePath;public readonly string Label;
}class ModelInput
{public byte[] Image { get; set; }public UInt32 LabelAsKey { get; set; }public string ImagePath { get; set; }public string Label { get; set; }
}
class ModelOutput
{public string ImagePath { get; set; }public string Label { get; set; }public string PredictedLabel { get; set; }
}
public class ImagePrediction
{[ColumnName("Score")]public float[] Score;[ColumnName("PredictedLabel")]public string PredictedLabel;
}

http://www.lryc.cn/news/336262.html

相关文章:

  • YOLOv9最新改进系列:YOLOv9改进之添加注意力-ContextAggregation,有效涨点!!!
  • 【数据结构】初识数据结构与复杂度总结
  • 子域名是什么?有什么作用?
  • 学习 Rust 的第一天:基础知识
  • 电商技术揭秘七:搜索引擎中的SEO关键词策略与内容优化技术
  • 系统开发实训小组作业week7 —— 优化系统开发计划
  • golang的引用和非引用总结
  • 2024认证杯数学建模B题思路模型代码
  • 一种快速移植 OpenHarmony Linux 内核的方法
  • java的jar包jakarta.jakartaee-web-api和jakarta.servlet-api有什么区别
  • QT_day2
  • Advanced RAG 02:揭开 PDF 文档解析的神秘面纱
  • Spring面试题pro版-1
  • 6 Reverse Linked List
  • 【随笔】Git 高级篇 -- 相对引用2 HEAD~n(十三)
  • 2024免费Mac电脑用户的系统清理和优化软件CleanMyMac
  • Centos7源码方式安装Elasticsearch 7.10.2单机版
  • mysql的安装和部署
  • 大数据基本名词
  • 网站网页客服、微信公众号客服、H5客服、开源源码与高效部署的完美结合
  • 1、Qt UI控件 -- qucsdk
  • Sora是什么?Sora怎么使用?Sora最新案例视频以及常见问题答疑
  • 如何在Ubuntu系统使用docker部署DbGate容器并发布至公网可访问
  • 解决 VSCode 编辑器点击【在集成终端中打开】出现新的弹框
  • 从零开始:构建、打包并上传个人前端组件库至私有npm仓库的完整指南
  • Ant Design Vue 表单验证手机号的正则
  • [dvwa] CSRF
  • 只为兴趣,2024年你该学什么编程?
  • HAL STM32 定时器PWM DMA输出方式
  • 博客部署004-centos安装mysql及redis