در پست قبل توضیحی در مورد ML.NET دادم که ML مخفف Machine Learning و .NET که همون فریمورک .net خودمان هست و کارش هم آموزش ماشین در .net با استفاده از c# و یا f#
چون چندسکویی هست از دستورات CLI استفاده کرده و من هم برای همین از VS Code استفاده میکنم که این دستورا را در بخش Terminal مینویسم.
بریم سر اصل مطلب اول باید SDK .NET را دانلود کنید اگر ویژوال استادیو دارین که لازم نیست. بعد میایم پروژه Console میسازیم
توی ترمینال مینویسیم
dotnet new console -o myApp
cd myApp
دستور dotnet یک اپلیکیشن new از نوع console میسازد و پارامتر -o یک دایرکتوری با نام myApp مسازده و فایل ها را درون آن ذخیره میکند و با cd myApp هم وارد دایرکتوری myApp میشویم (cd = change directory)
حالا نوبت به نصب پکیج ML.NET میرسد برای این کار دستور زیر را در ترمینال (command prompt) مینویسیم
dotnet add package Microsoft.ML --version 0.8.0
دانلود data set
در-machine learning app شما نوعی از iris flower (setosa, versicolor, or virginica) بر اساس چهار ویژگی : petal length (طول گلبرگ), petal width(عرض گلبرگ),(طول ساقه) sepal length, و (عرض ساقه)sepal width پیشبینی خواهد کرد.
این-UCI Machine Learning Repository: Iris Data Set, بازکنید و داخل یک تکسک ادیتور مثل notepad کپی و پیست کنید و در دایرکتوری myApp با نام iris-data.txt ذخیره کنید.
وقتی پیست میکنید داده ها به صورت زیر نمایش داده میشود. هر سطر نشان دهنده یک نمونه مختلف از یک iris flower می باشد. از چپ به راست، ستون نشان دهنده طول ساقه (sepal length) ، عرض ساقه (sepal width) ، طول گلبرگ (petal length) ، عرض گلبرگ (petal width) و نوع iris flower
5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa ...
اگر از ویژوال استادیو استفاده میکنید باید پیکربندی فایل iris-data.txt به دایرکتوری خروجی کپی می شود.
نوشتن کد
فایل Program.cs باز کنید و کد زیر درون آن جایگزین کنید:
using Microsoft.ML; using Microsoft.ML.Runtime.Api;using Microsoft.ML.Runtime.Data;using Microsoft.ML.Runtime.Learners;using Microsoft.ML.Transforms.Conversions;using System; namespace myApp{class Program{// STEP 1: Define your data structures// IrisData is used to provide training data, and as// input for prediction operations// - First 4 properties are inputs/features used to predict the label// - Label is what you are predicting, and is only set when trainingpublic class IrisData{public float SepalLength;public float SepalWidth;public float PetalLength;public float PetalWidth;public string Label;} // IrisPrediction is the result returned from prediction operationspublic class IrisPrediction{[ColumnName("PredictedLabel")]public string PredictedLabels;} static void Main(string[] args){// STEP 2: Create a ML.NET environmentvar mlContext = new MLContext(); // If working in Visual Studio, make sure the 'Copy to Output Directory'// property of iris-data.txt is set to 'Copy always'string dataPath = "iris-data.txt";var reader = mlContext.Data.TextReader(new TextLoader.Arguments(){Separator = ",",HasHeader = true,Column = new[]{new TextLoader.Column("SepalLength", DataKind.R4, 0),new TextLoader.Column("SepalWidth", DataKind.R4, 1),new TextLoader.Column("PetalLength", DataKind.R4, 2),new TextLoader.Column("PetalWidth", DataKind.R4, 3),new TextLoader.Column("Label", DataKind.Text, 4)}});IDataView trainingDataView = reader.Read(new MultiFileSource(dataPath)); // STEP 3: Transform your data and add a learner// Assign numeric values to text in the "Label" column, because only// numbers can be processed during model training.// Add a learning algorithm to the pipeline. e.g.(What type of iris is this?)// Convert the Label back into original text (after converting to number in step 3)var pipeline = mlContext.Transforms.Conversion.MapValueToKey("Label").Append(mlContext.Transforms.Concatenate("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")).Append(mlContext.MulticlassClassification.Trainers.StochasticDualCoordinateAscent(labelColumn: "Label", featureColumn: "Features")).Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel")); // STEP 4: Train your model based on the data setvar model = pipeline.Fit(trainingDataView); // STEP 5: Use your model to make a prediction// You can change these numbers to test different predictionsvar prediction = model.MakePredictionFunction<IrisData, IrisPrediction>(mlContext).Predict(new IrisData(){SepalLength = 3.3f,SepalWidth = 1.6f,PetalLength = 0.2f,PetalWidth = 5.1f,}); Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}");}}}
اپ-app را اجرا کنید
درون command prompt یا terminal دستور زیر را اجرا کنید
dotnet run
آخرین خط خروجی نوع پیش بینی گلرنگ است. شما می توانید مقادیر منتقل شده به تابع Predict
را برای دیدن پیش بینی ها بر اساس اندازه گیری های مختلف تغییر دهید.
تبریک می گوییم، شما اولین مدل یادگیری ماشین خود را با ML.NET ساخته اید!
نوشتن ML.NET 5 مرحله دارد
مرحله 1: ساختارهای داده خود را تعریف کنیدIrisData برای ارائه داده های آموزشی استفاده می شود و به عنوانورودی برای عملیات پیش بینیچهار پراپرتی اول ورودی/ویژگی مورد استفاده برای پیشبینی برچسب استlable چیزی است که شما پیش بینی می کنید و تنها زمانی تنظیم می شوید که تمرین می کنید
IrisPrediction نتیجه برگشتی از عملیات پیش بینی
مرحله دوم : ساخت یک محیط ML.NET
اگر با ویژوال استودیو کار میکنید ، حتما مطمئن شوید که 'Copy to Output Directory'
پراپرتی فایل iris-data.txt روی 'Copy always' ست شده باشد
مرحله 3 : تبدیل داده شما و اضافه کردن یک یادگیرنده --- داده های خود را تبدیل کرده و یادگیرنده را اضافه کنید
مقادیر عددی را به متن در ستون "Label" اختصاص دهید،فقط بخطر
اعداد را می توان در حین آموزش مدل پردازش کرد
الگوریتم یادگیری را به خط لوله اضافه کنید.به عنوان مثال (این کدام نوع iris است؟)
تبدیل برچسب به متن اصلی (پس از تبدیل به شماره در مرحله 3)
مرحله 4: آموزش مدل خود را بر اساس مجموعه داده
مرحله5: برای پیش بینی از مدل خود استفاده کنید
شما می توانید این اعداد را برای تست پیش بینی های مختلف تغییر دهید
البته تغییرات زیادی کرده تا آنجایی که داکیومنت های ماکروسافت/میکروسافت با مثال هایش همخوانی نداشت ! بنظرمن تا انتشار نسخه نهایی آن دست نگهدارید.