آموزش شبکه‌ عصبی پرسپترون

زبان برنامه نویسی متلب یکی از محبوب‌ترین زبان‌های برنامه نویسی است که در بین دانشجویان رشته مهندسی و مدیریت کاربرد بسیار زیادی دارد. این زبان برنامه نویسی قابلیت‌های بسیار زیادی را ارایه می‌دهد که چندی پیش در طول مقالاتی از متلب آنالیز به آموزش مقدماتی آن پرداخیم و از مدتی قبل نیز شروع به آموزش شبکه عصبی در این متلب پرداخته‌ایم. در مقالات گذشته با ساختار، تاریخچه، ابزار‌ها و انواع شبکه‌های عصبی آشنا شدیم و اکنون در این مقاله از متلب آنالیز تصمیم داریم تا به ادامه موضوع آموزش شبکه‌ عصبی پرسپترون بپردازیم. پس تا انتهای مقاله همراه ما باشید.

آموزش شبکه‌ عصبی پرسپترون : شبیه سازی

برای یادگیری دستور sim در زبان برنامه نویسی متلب، بهتر است از طریق یک مثال وارد عمل شویم. فرض کنید شبکه پرسپترونی داریم که دارای یک نرون و دو ورودی است. حال برای ساخت این شبکه از دستور زیر باید استفاده کرد.

;(Net = newp ([-2,2;-2 2],1

دستور فوق باعث می‌شود که وزن‌های و بایاس شبکه عصبی صفر باشد. البته باید توجه داشت که امکان تغییر این مقادیر نیز وجود دارد. شرایطی را فرض کنید که می‌خواهیم وزن‌ها ۱ و -۱ قرار دهیم و مقدار بایاس را نیز ۱ قرار دهیم. به عبارت دیگر، خط جدا کننده دو کلاس را –x+y+1 در نظر می‌گیریم و در این صورت خروجی به صورت hardlim(-z+y+1) تعریف می‌شود. برای انجام این کار از طریق دستور زیر باید وارد عمل شد:

;[Net.IW{1,1} = [-1, 1

;Net.b{1}=1

حال با وارد کردن دستور بالا، برای اینکه پی ببریم تغییر مقادیر به درستی صورت گرفته است، باید آن‌ها را به روش زیر بررسی کرد:

{Net.IW{1,1

=ans

    ۱- ۱

{Net.b{1

=ans

۱

اکنون بایست طبقه‌بند دو نمونه را مورد بررسی قرار داد. نمونه اول (۱,۱) است و نمونه دوم مقادیر (۱,-۱) را دارد. پاسخ شبکه به هر کدام از این ورودی‌ها را استفاده از دستور sim به شکل زیر محاسبه می‌‌شود:

;[P1 = [1,1

(A1 = sim(net,p1

=A1

۱

ادامه آن نیز بدین شکل خواهد بود:

;[P2 = [1,-1

(A2 = sim(net,p2

=A2

۰

اطلاعات فوق نشان‌دهنده صحت عملکرد طبقه‌بند هستند. البته باید توجه داشت که می‌توان به صورت همزمان پاسخ به هر دو ورودی را دریافت کرد که آن نیز به طریق زیر خواهد بود:

;{[P3= {[1,1];[1,-1

(A3 = sim(net,p3

A3

[۰]  [۱]

آموزش شبکه‌ عصبی پرسپترون : مقداردهی آغازین پارامتر‌ها

برنامه نویسی متلب باشد توجه داشته باشند که همیشه می‌توان با استفاده از تابع init مقادیر شبکه را به مقدار اولیه بازگرداند. برای درک بهتر شرایطی را فرض کنید که در آن شبکه ما دو ورودی و یک نرون دارد، از این حالت کد‌ها باید به صورت زیر باشند:

;(Net = newp ([-2,2;-2  ۲],۱

اکنون برای بررسی کردن وزن‌ها باید از طریق دستور زیر وارد عمل شد:

;{Wts=net.IW{1,1

حال خروجی زیر نمایش داده خواهد شد:

= Wts

 ۰   ۰

برای بررسی کردن بایاس نیز باید از طریق دستور زیر اققدام کرد:

;{Bias=net.b{1

خروجی کد فوق نیز به شکل زیر خواهد بود:

= Bias

۰

حال می‌‌توانیم از طریق دستور زیر، وزن‌های شبکه را تغییر دهیم:

;[Net.IW{1,1}=[3,4

;Net.b{1}=5

حال برنامه نویس می‌تواند تغییر وزن‌ها را در شبکه مشاهده کند. اما همان‌طور که گفته شد کاربر می‌تواند از طریق دستور init مقداردهی اولیه وزن‌ها ار انجام دهد. برای مثال به دستور زیر توجه کنید:

;(Net=init(net

حال با بررسی کردن وزن‌ها، نتیجه زیر نمایش داده خواهد شد:

= Wts

۰  ۰

= Bias

۰

آموزش شبکه‌ عصبی پرسپترون : یادگیری پرسپترون

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

حال بیایید مثال قسمت قبل برگردیم. شبکه پرسپترون ساخته شده با دستور زییر را در نظر بگیرید:

;(Net = newp ([-2,2;-2  ۲],۱

حال فرض کنید که ین شبکه باید پاسخی مناسب به نقطه زیر دهد:

;[P=[2,2

خروجی این نقطه نیز به شکل زیر خواهد بود:

;[T=[0

اکنون در مثال فوق مقدار epochs را ۱ در نظر می‌گیریم و تحت شرایطی عمل می‌کنیم که شبکه تنها یک بار از روی داده‌های ما عبور کند:

;Net.trainParam.wpochs=1

حال باید برای آموزش شبکه مورد نظر خود دست به کار شویم که برای انجام این فرآیند باید از طریق کد دستور train وارد عمل شد:

;(Net=train(net,p,t

با وارد کردن دستور فوق، وزن‌های جدید به شکل زیر خواهند بود:

{Net.IW{1.1

=Ans

۲-  ۲-

{Net.b{1

= Aans

۱-

حال فرض کنید که چندین ورودی داریم و تصمیم داریم روی کل مجموعه داده‌های موجود عملیات آموزش را انجام دهیم. بدین منظور به شکل زیر ورودی و خروجی‌ها را تعریف می‌کنیم.

;[[P =[ [2’2]  [۲;-۲]  [-۲;۲]  [-۱;۱

;[T =[0  ۱  ۰  ۱

اکنون از طریق دستور زیر شبکه خود را آموزش می‌دهیم:

;(Net =train(net,p,t

حال وزن‌های جدید به همراه بایاس عبارت است از:

= W

 -۳    -۱

= B

۰

اکنون می‌توانیم شبکه را پس از انجام آموزش، از طریق روش زیر شبیه سازی کرد:

(a = sim(net,p

= A

[۰]    [۰]    [۱]    [۱]

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

;Net.trainParam.epochs=4

با آموزش دوباره شبکه، خروجی زیر نمایش داده خواهد شد:

TRAINC,  Epoch  ۰/۲۰

TRAINC,  Epoch  ۳/۲۰

.TRAINC,  Performance goal met

این خروجی نشان می‌دهد که حاصل خطای نهایی صفر است و با شبیه سازی شبکه، نتیجه زیر نمایش داده خواهد شد:

(A= sim (net,p

= A

[۰]  [۱]  [۰]  [۱]

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

جهت دانلود جدیدترین محصولات آموزشی در حوزه آموزش شبکه‌ عصبی پرسپترون چندلایه اینجا کلیلک کنید