پرینت

ايجاد شبكه‌هاي عصبي با ابزار GUI

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

به طور كلي در نرم افزار 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 مقدار [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

همان طوري كه مشاهده مي شود شبكه با ده نرون به خوبي آموزش ديده و براي داده هاي تست نيز خروجي مناسبي داريم.

(توجه كنيد كه در شكل، منحني هاي خروجي و تارگت روي هم افتاده اند)

 

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

اضافه کردن نظر