به طور کلی در نرم‌ افزار MATLAB به ۳ روش می‌ توان شبکه‌های عصبی ایجاد کرد:

 

  1. کدنویسی
  2. استفاده از سیستم‌های بلوکی (Simulink)
  3. استفاده از محیط گرافیکی (GUI)

 

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

 

برای شروع nntool را در خط فرمان تایپ و اینتر کنید و یا از مسیر Start >> Toolboxes >> Neural Network >> Neural Network Tool استفاده کنید پنجره‌ای مانند شکل زیر مشاهده می‌کنید:

 

 

 

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

 

 

 

 

در تب Network شما می‌توانید تنظیمات مربوط به شبکه عصبی مورد نظرتان را وارد کنید و در زبانه دوم یعنی Data شما داده‌های خود را وارد می‌کنید. حالا برای مثال اول می‌خواهیم با یک تک پرسپترون، گیت NAND دو ورودی را پیاده‌سازی کنیم ابتدا نام شبکه مورد نظر را در قسمت Name وارد کنید من نام NAND را وارد می‌کنم سپس در قسمت Network Type نوع شبکه را Perceptron انتخاب کنید پس از آن به تب Data رفته و در قسمت Name نام p و در قسمت Value مقدار [۱ ۰ ۱ ۰;۱ ۱ ۰ ۰] و در Data Type حالت Inputs را انتخاب کرده و به روی Create کلیک کنید دیالوگی مبنی بر ذخیره دیتا مشاهده می‌‌کنید آن را Ok کنید سپس برای ذخیره‌ی داده‌های تارگت مشابه حالت قبل عمل کنید یعنی در قسمت Name نام t و در قسمت Value مقدار [۰ ۱ ۱ ۱] و در 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 بروید همانطور که ملاحظه می‌کنید در اینجا می‌توانید پارامترهای زیادی را تغییر دهید مثلا ممکن است در مساله‌ای خاص، پرفورمانسی برابر ۰.۰۰۱ کافی باشد که می‌توانید در قسمت 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

 

 

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

(توجه کنید که در شکل، منحنی‌های خروجی و تارگت روی هم افتاده‌اند)

 

 

 

 

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

منبع: سایت engpedia