آمار کلی

بازدیدکنندگان : 2933879

Who's Online

ما 47 مهمان و 1 عضو آنلاین داریم

آخرين ارسالهاي تالار

پرداخت آنلاین بانک ملت

مبلغ تراکنش (ريال):
ايجاد شبكه‌هاي عصبي با ابزار GUI مشاهده در قالب PDF چاپ فرستادن به ایمیل
نوشته شده توسط مجتبی آیتی نیا   
یکشنبه, 30 خرداد 1389 ساعت 12:13

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

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

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

 

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

اگر سؤالي داشتيد در بخش نظرات آن را مطرح كنيد.

نظر ها (241)
  • موج و ساحل
    سلام آفا مجتبي
    كارت خيلي خوبه
    تبريك ميگم
    ادامه بده
  • ناشناس
    :P لطفا" با برنامه نويسي هم آموزش بدين
  • moj1001
    سعي مي‌كنم كه سر فرصت با برنامه‌نويسي هم آموزش بدم.
  • ناشناس
    سلام
    من یه شبکه عصبی پرسپترون از طریق کد نویسی برای کنترل پسورد طراحی کردم ولی نمیدونم نمونه های پسورد را برای آموزش چطوری به شبکه بدم.
    مثلا پسورد fAr12@g بعنوان یک پسورد strong میباشد.

    ممنون
  • صانع
    دمت داغ
    پهلون دست درست
    به درد من كه خيلي خورد
  • shahram  - neural net
    salam
    mamnoon az matalebe mofidetoon
    man chanta mushkel daram dar murede sakhte shabake ba matlab
    mishe telphoni ba ham harf bezanim agar vaghtesho dashtin
    manoon misham
    lotfan be mail bezanid
    sh.rezaeii@yahoo.com
    bazam mamnoon
  • saeed  - تشکر
    سلام دوست گرامی از راهنمایی ها که برای دوستان مبتدی مثل من گذاشتین واقعا ممنونم...اما اگه امکانش هست در مورد شبکه های هاپفیلد هم یک مثال بگذارید چون شدیدا نیازمندش هستم و در واقع روند انجام پروژه ام به تعویق افتاده است. پیشاپیش سپاسگذارم. (ssm3500@yahoo.com)
  • saye  - aneural netwok
    سلام،خسته نباشد و خدا قوت
    ميشه كدنويسي تو مطلب براي شبكه عصبي مصنوعي رو با مثال y=sinx بنويسيد تو سايت يا ايميل كنيد. من تو مطلب مبتدب هستم براي پروژه ام نيازش دارم.
    ممنون ميشم كمكم كنيد
  • moj1001
    سلام ممنون
    با دستور newff مي‌توني اين‌كار رو انجام بدي. يه سرچ توي help بزن ساختارش رو متوجه مي‌شي.
  • saye  - neural network
    سلام مجدد
    همون طور كه دفعه پيش خدمتتون عرض كردم،من كلا تو برنامه نويسي و مطلب مبتدي هستم،خواستم شما بازدن مثالي مثل y=sinx راهنماييم كنيد.
    پروژه ام روي شبكه هاي عصبي تو مطلب هست،الان هم چند وقته دنبالش هستم يادبگيرم. اگر شما جزوه اي يا چيزي در مورد nntool مطلب داريد،كه كامل ياد داده باشه(به زبان فادرسي) ممنون ميشم كمكم كنيد.
    با تشكر :evil:
  • saye  - re: neural network
    سلام،يه مشكلي برام تو nntool مطلب پيش اومده! ميشه لطف كنيد راهنماييم كنيد.
    من داده هايي رو تو excel دارم،دو ستون به عنوان ورودي،يه ستون به عنوان خروجي.اينها رو وارد مطلب كردم؛به اين شكل:تو خط فرمانinput رو تايپ كرده و علامت كروشه گذاشتم،بعد داده ها رو از excelكپي كرده و pasteكردم،در نهايت با بستن كروشه وگذاشتن علامت (،)و(;)به خط بعدي رفته وoutput رو به همين ترتيب وارد كردم وقتي شبكه رو ايجاد ميكنم و بعد از انجام مراحل لازمtrain رو ميزنم آموزش نميبينه و پيغام زير تو صفحه اصلي مطلب ظاهر ميشه:
    ??? Insufficient number of outputs from right hand side of equal sign to satisfy assignment.

    Error in ==> nntool at 681
    [errmsg,errid] = me.message;

    com.mathworks.jmi.MatlabException: Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
  • moj1001
    سلام
    داده‌هاتو بصورت سطري وارد كن نه ستوني!
    در ضمن نيازي به كپي پست نيست! فايل اكسلت رو در دايركتوري جاري متلب قرار بده و از كد زير استفاده كن:
    کد:
    xlsread('data.xlsx')
    input=mydata(:,1:2);
    target=mydata(:,3);

    بعد براي سطري كردن هم:
    کد:
    input=input';
    target=target';

    موفق باشي
  • ناشناس
    سلام.می خوام یک شبکه عصبی در محیط متلب برای یک متغییر وابسته به سه پارامتر دیگر طراحی کنم.کمک کنید(نوع شبکه و روش آموزش)
تنها کاربران عضو شده می توانند نظر ارسال کنند!
آخرین بروز رسانی در دوشنبه, 16 مرداد 1391 ساعت 02:49