پیاده سازی شبکه عمیق در متلب: ساختن شبکه یادگیری عمیق ساده برای کلاسه بندی

یادگیری عمیق

در این درسنامه که ترجمه ی یکی از مثال های موجود در متلب است، نشان می دهیم که چگونه می توان یک شبکه عصبی کانولوشن ساده را برای کلاسه بندی آموزش عمیق ساخته و آموزش دهیم. شبکه های عصبی عمیق، ابزاری ضروری برای یادگیری عمیق هستند و عموما از آن برای بازشناسی تصویر استفاده می کنند.

مقاله مرتبط :

در این مثال موارد زیر آموزش داده شده است:

  • بارگزاری و جست وجوی داده های تصویری
  • تعریف ساختار شبکه
  • تعیین داده های آموزش و راستی آزمایی
  • پیش بینی شماره کلاس برای یک داده ی جدید و محاسبه ضریب دقت کلاسه بندی

۱ – بارگزاری و جست وجوی داده های تصویری

نمونه های رقمی را به صورت یک مجموعه داده که داده های هرکلاس در یک پوشه با یک شماره ی مشخص قرارداده شده اند، بارگزاری کنید. دستور imageDatastore به صورت هوشمند تصاویر را با توجه به اسم پوشه ای که در آن هستند، برچسب گزاری می کند. در این درسنامه از اعداد موجود در پایگاه داده ای به نام DigitDataset  که در خود متلب وجود دارد، استفاده شده است.

در اینجا می خواهیم تعدادی از تصاویر را فراخوانی و نمایش دهیم. برای این کار، به صورت زیر عمل می کنیم :

figure;

perm = randperm(10000,20);

for i = 1:20  

subplot(4,5,i);

    imshow(digitData.Files{perm(i)});

end

 

برای محاسبه ی تعداد تصاویر در هر کلاس( پوشه ) می توان از دستور countEachLabel به صورت زیر استفاده کرد :

labelCount = countEachLabel(digitData)

وقتی دستور فوق را تایپ کنیم، نتیجه بصورت زیر خواهدشد :

CountLable
01000
11000
21000
31000
41000
51000
61000
71000
81000
91000

برای ورود اطلاعات به شبکه عصبی عمیق، ابعاد تصاویر باید یکسان و تعیین شده باشد. برای پایگاه داده ی مورد استفاده از دستور زیر برای دانستن ابعاد اولین تصویر استفاده می کنیم :

img = readimage(digitData,1);
size(img)

نتیجه به صورت زیر است:

ans = 1×۲     ۲۸    ۲۸

 

یعنی تصویر دو بعدی و یک کاناله است و ابعاد آن هم ۲۸*۲۸ است.

۲ – تعیین مجموعه داده های آموزش و راستی آزمایی

داده ها را به دو دسته ی آموزش و راستی آزمایی تقسیم کنید. از هرکلاس، ۷۵۰ داده را برای آموزش اختصاص دهید و از بقیه ی داده ها را به عنوان داده های راستی آزمایی در نظر بگیرید. با استفاده از دستور splitEachLabel می توانید این کار را انجام دهید. مطابق کد زیر، داده های آموزش و داده های راستی آزمایی در  trainDigitData  وvalDigirData قرارداده خواهند شد.

trainNumFiles = 750;
[trainDigitData,valDigitData] = splitEachLabel(digitData,trainNumFiles,'randomize');

۳ – تعریف ساختار شبکه

در این مرحله ساختار شبکه ی کانولوشن را تعریف می کنیم. در مورد لایه های تشکیل دهنده ی شبکه کانولوشن در درسنامه های قبل توضیحاتی ارائه شده است.

ساختار شبکه ی پیشنهادی به صورت زیر تعریف می شود:

layers = [
imageInputLayer([28 28 1])

convolution2dLayer(3,16,'Padding',1)
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,32,'Padding',1)
batchNormalizationLayer
reluLayer

maxPooling2dLayer(2,'Stride',2)

convolution2dLayer(3,64,'Padding',1)
batchNormalizationLayer
reluLayer

fullyConnectedLayer(10)
softmaxLayer
classificationLayer];

۴ – تعریف ویژگی های آموزش

بعد از تعریف ساختارشبکه، ویژگی های آموزش را تعیین می کنیم. منظور از ویژگی های آموزش، تنظیم پارامترهای شبکه برای فرآیند آموزش است. مثلا در این مثال برای آموزش از روش گرادیان نزولی با گشتاور(SGDM) با نرخ یادگیری ۰٫۰۱ استفاده شده است. بیشترین تعداد دفعات تکراررفرآیند آموزش ۴ تعیین شده است. تعریف این پارامترها به صورت زیر انجام می شود:

options = trainingOptions('sgdm',...
'MaxEpochs',3, ...
'ValidationData',valDigitData,...
'ValidationFrequency',30,...
'Verbose',false,...
'Plots','training-progress');

 

۵ – آموزش شبکه با داده های آموزش

برای فرآیند آموزش، از دستور trainNetwork  استفاده می کنیم. این دستور در حالت عادی، اگر روی سیستم شماGPU وجود داشته باشد، از این سخت افزار برای اجرا استفاده خواهد کرد. تعریف فرآیند آموزش به صورت زیر است :

net = trainNetwork(trainDigitData,layers,options);

 


کلاسه بندی داده های راستی آزمایی و محاسبه صحت کار

در این مرحله داده های راستی آزمایی را به شبکه می دهیم و با استفاده از اعمال این داده ها به شبکه و نتایج حاصله برای پیش گویی کلاس برنده، صحت بازشناسی این شبکه را به دست می آوریم .

predictedLabels = classify(net,valDigitData);
valLabels = valDigitData.Labels;

accuracy = sum(predictedLabels == valLabels)/numel(valLabels)

که نتیجه ی آن به صورت زیر خواهد بود:

accuracy = 0.9976

بیشتر بخوانید :

همچنین ببینید

فناوری تشخیص چهره و کاربردهای آن، تاریخچه تکنولوژی تشخیص چهره

فناوری تشخیص چهره و کاربردهای آن + تاریخچه

فناوری تشخیص چهره یک فناوری بیومتریک است که با استفاده از تجزیه و تحلیل الگوهایی …

5 نظر

  1. داشتم در مورد یک موردی برای پیاده سازی شبکه های عصبی سرچ می کردم یهو دیدم سایت شهاب بالا اومد .

    خیللللی خوش حال شدم .

    ایول اگر همین طور ادامه بدین تبدیل میشین به یکی از سایتهای مرجع در زمینه هوش مصنوعی

  2. سلام خدمت عزیزان متولی سایت شهاب
    آموزشهاتون خیلی روان است واقعا این کار هنرمندانه است تبریک میگم. سایتهایی مثل سایت شما که جاذب افراد هستند و آینده ی[وبی انشا الله داشته باشند و مطالب مفید ارائه میکنند یک آیکون Donate داشته باشید برای کسانی که بخوان از زحمات شما تشکر کنند برای توانایی ادامه فعالیت و خدمت به جامعه ی علمی.
    خدا قوت دلاوران.

    • سلام
      خیلی ممنون که با ما همراه هستید. باعث افتخار و خوشحالی ماست که مطالب سایت ما برای شما مفید بوده.
      از پیشنهادی که دادید هم ممنونم. تا الان ما هدفمون از کار مجله مالی نبوده و صرفا برای کمک به محقق ها و علاقمندان ها به حوزه هوش مصنوعی و پردازش تصویر این مطالب رو ارائه می کردیم. ولی شاید در آینده پیشنهاد شما رو هم در نظر بگیریم.
      انشاالله موفق باشید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *