close
دانلود آهنگ جدید
آموزش ML.NET در 10 دقیقه

یک توسعه دهنده .Net

آموزش ML.NET در 10 دقیقه

ML.NET,Machine Learning,

در پست قبل توضیحی در مورد ML.NET  دادم که ML  مخفف Machine Learning و .NET  که همون فریمورک .net  خودمان هست و کارش هم آموزش ماشین در .net  با استفاده از c# و یا f#چون چندسکویی هست از دستورات CLI  استفاده کرده و من هم برای همین از VS Code  استفاده میکنم که این دستورا را در بخش Terminal  مینویسم. بریم سر اصل مطلب اول باید SDK .NET را دانلود کنید اگر ویژوال استادیو دارین که لازم نیست. بعد میایم پروژه Console  میسازیمتوی ترمینال مینویسیمdotnet…

آموزش ML.NET در 10 دقیقه

353

در پست قبل توضیحی در مورد 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 training
public class IrisData
{
public float SepalLength;
public float SepalWidth;
public float PetalLength;
public float PetalWidth;
public string Label;
}

// IrisPrediction is the result returned from prediction operations
public class IrisPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedLabels;
}

static void Main(string[] args)
{
// STEP 2: Create a ML.NET environment
var 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 set
var model = pipeline.Fit(trainingDataView);

// STEP 5: Use your model to make a prediction
// You can change these numbers to test different predictions
var 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: برای پیش بینی از مدل خود استفاده کنید
 شما می توانید این اعداد را برای تست پیش بینی های مختلف تغییر دهید