شبکه های عصبی در MATLAB
به طور کلی در نرم افزار MATLAB به 3 روش می توان شبکههای عصبی ایجاد کرد:
- کدنویسی
- استفاده از سیستمهای بلوکی (Simulink)
- استفاده از محیط گرافیکی (GUI)
در
این مقاله قصد دارم نحوهی استفاده از GUI در جعبهابزار شبکه عصبی را به
دوستان معرفی کنم البته به دوستان توصیه میکنم که ابتدا با کدنویسی آشنا
شوند زیرا ممکن است درجایی مجبور به نوشتن کد باشند مگر کسانی که شبکه
عصبی، درس تخصصی آنها نبوده و فقط برای انجام قسمتی از پروژهشان میخواهند
از شبکههای عصبی استفاده کنند که استفاده از GUI در این مورد بسیار ساده و
سریع است.
برای
شروع nntool را در خط فرمان تایپ و اینتر کنید و یا از مسیر Start
>> Toolboxes >> Neural Network >> Neural Network Tool
استفاده کنید پنجرهای مانند شکل زیر مشاهده میکنید:

برای
ایجاد یک شبکه جدید، روی دگمه New کلیک کنید همانطور که مشاهده میشود،
پنجرهای باز میشود که میتوانید در آن پارامترهای شبکهی مورد نظرتان را
وارد کنید:

در
تب Network شما میتوانید تنظیمات مربوط به شبکه عصبی مورد نظرتان را وارد
کنید و در زبانه دوم یعنی Data شما دادههای خود را وارد میکنید. حالا
برای مثال اول میخواهیم با یک تک پرسپترون، گیت NAND دو ورودی را
پیادهسازی کنیم ابتدا نام شبکه مورد نظر را در قسمت Name وارد کنید من نام
NAND را وارد میکنم سپس در قسمت Network Type نوع شبکه را Perceptron
انتخاب کنید پس از آن به تب Data رفته و در قسمت Name نام p و در قسمت
Value مقدار [1 0 1 0;1 1 0 0] و در Data Type حالت Inputs را انتخاب کرده و
به روی Create کلیک کنید دیالوگی مبنی بر ذخیره دیتا مشاهده میکنید آن
را Ok کنید سپس برای ذخیرهی دادههای تارگت مشابه حالت قبل عمل کنید یعنی
در قسمت Name نام t و در قسمت Value مقدار [0 1 1 1] و در Data Type حالت
Targets را انتخاب کرده و به روی Create کلیک کنید دیالوگ مشاهده شده را Ok
کنید. به تب Network بازگشته و دادههای ورودی و تارگت را از منوی
مقابلشان انتخاب کنید برای دیدن ساختار شبکه، بر دگمه View کلیک کنید بصورت
زیر:

همانطور
که میبینید از تابع محدود کننده سخت نامتقارن استفاده کردهایم تا
خروجیهای ما صفر یا یک شوند حالا برای ایجاد شبکه، Create را کلیک، و
دیالوگ پس از آن را Ok کنید به پنجره اصلی بازگشته و در قسمت Networks به
روی NAND کلیک کرده و Open را بزنید در پنجره باز شده به تب Train رفته و
مقادیر ورودی و تارگت را وارد کرده و برای شروع آموزش Train Network را
بفشارید همانطور که مشاهده میکنید به پرفورمانس صفر رسیدهایم(اتفاقی که
در هیچکدام از مسائل واقعی که ما با آن سروکار داریم، هرگز رخ نخواهد داد!)
که دلیلش را هم احتمالا میدانید حال به پنجره اصلی بازگشته و مقادیر
خروجی و خطا را به ازای دادههای آموزشی مشاهده کنید که البته از پرفورمانس
صفر میتوان حدس زد که چه مقادیری به دست آمده است.
اکنون اگر بوسیلهی همین روش تابع XOR را پیادهسازی کنید نتایج وحشتناکی خواهید گرفت.
برای
مثال دوم میخواهیم تابع سینوس را بوسیلهی یک شبکه عصبی MLP ، تقریب
بزنیم برای این منظور در پنجره مدیریت شبکه و دیتا، New را کلیک کرده و
مانند شکل زیر عمل کنید:

شبکه
را دو لایه قرار دادهایم که در لایه اول ده نرون با تابع تبدیل تانژانت
سیگموئید و لایه دوم که همان لایه خروجی است را تابع تبدیل خطی دادهایم
(نرونهای لایه خروجی برابر تعداد خروجیهای شبکه میباشد که در این مثال
برابر یک است.)
در
اینجا دیگر نمی توانید از روش قبل برای ایجاد دادههای خود استفاده کنید و
باید دیتا را یا از یک فایل mat بگیرید و یا از فضای کاری متلب. دستورات
زیر را در خط فرمان تایپ و اینتر کنید:
;p=0:0.1:4*pi
;(t=sin(p
به
پنجرهی اصلی بازگشته و Import را کلیک کنید سپس دادههای p و t را به
ترتیب عنوان دادههای ورودی و تارگت، Import کرده و سپس Close کنید.
حال
به پنجرهی تنظیمات بازگشته و دادههای ورودی و تارگت را وارد کرده و شبکه
را ایجاد کنید. شبکهای را که با نام Sin ذخیره کردهاید، باز کنید و به
تب Train بروید و پس از وارد کردن دادههای ورودی و تارگت، به تب Training
Parameters بروید همانطور که ملاحظه میکنید در اینجا میتوانید پارامترهای
زیادی را تغییر دهید مثلا ممکن است در مسالهای خاص، پرفورمانسی برابر
0.001 کافی باشد که میتوانید در قسمت goal آن عدد را وارد کنید و نیز
تنظیمات دیگری از جمله زمان، تعداد مراحل آموزش و …

مقادیر را پیشفرض قرار داده و شبکه را آموزش دهید:

اگر به مقادیری غیر از آنچه در بالا آمده، رسیدهاید، تعجب نکنید.
در
تب View/Edit Weights میتوانید تمام وزنها و بایاسها را مشاهده کنید به
پنجرهی اصلی بازگردید و Export را کلیک کرده و شبکه و نیز دادههای خروجی
و خطا را به فضای کاری متلب انتقال دهید و کدهای زیر را اجرا کنید:
(subplot(2,1,1
;(y1=sim(Sin,p
(‘plot(p,t,p,y1,’m
;([xlim([0 4*pi]);ylim([-1 1
;('(title('Network Output (Training Data
(subplot(2,1,2
;x=0:0.001:4*pi
;(y2=sim(Sin,x
('plot(x,sin(x),x,y2,'m
;([xlim([0 4*pi]);ylim([-1 1
;(‘(title(‘Network Output (Test Data
همانطوری که مشاهده میشود شبکه با ده نرون به خوبی آموزش دیده و برای دادههای تست نیز خروجی مناسبی داریم.
(توجه کنید که در شکل، منحنیهای خروجی و تارگت روی هم افتادهاند)

نکته: توجه کنید که تابع سینوس یکی از سادهترین توابع است و آن را میتوانید با تعداد نرونهای کمتری (حتی دو سه نرون) با تقریب نسبتا خوبی پیادهسازی کنید. درواقع بسته به خودتان است که چه میزان دقت مورد نیاز شماست. یکی از توابع سخت برای پیادهسازی، تابع مربعی میباشد که دلیل آن تغییرات شدید در لبههای بالارونده و پائینروندهی آن است به عبارتی دیگر اگر شما میخواهید دو تابع سینوسی و مربعی را با دقت یکسانی تقریب بزنید، شما مجبور هستید تا شبکهی بزرگتری را برای تابع مربعی درنظر بگیرید این تابع را خودتان پیادهسازی کنید تا درک بهتری از شبکه عصبی داشته باشید.
*نصب و سرویس تجهیزات دوربین مدار بسته،دزدگیر اماکن،اعلام حریق و...