Artificial Intelligence - هوش مصنوعی  
انجمن را در گوگل محبوب کنيد :

بازگشت   Artificial Intelligence - هوش مصنوعی > محاسبات نرم > شبکه های عصبی (Neural Networks)


 
تبليغات سايت
Iranian Association for the Advancement of Artificial Intelligence
ارسال تاپيک جديد  پاسخ
 
LinkBack ابزارهاي تاپيک نحوه نمايش
قديمي ۰۳-۱۹-۱۳۸۷, ۱۰:۳۷ بعد از ظهر   #1 (لینک دائم)
Administrator
 
آواتار Siavash
 
تاريخ عضويت: ارديبهشت ۱۳۸۷
محل سكونت: تهران
پست ها: 179
تشكرها: 27
439 تشكر در 108 پست
My Mood: Mehrabon
پيش فرض شناسایی حروف توسط شبکه های عصبی

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

وااای مگه می شه؟؟؟ من فکر می کردم باید لااقل توی مثال هامون به کامپیوتر بگیم مثلا این A هست و این B هست!
" خوب اون هم نوعی یادگیری هست که بهش اصطلاحا Supervised می گن. اما توی این مثال حالت جالب تر یعنی Unsupervised رو می خوایم بررسی کنیم. به این صورت که فقط به کامپیوتر می گیم ۳ دسته وجود داره و براش چندین مثال می زنیم و خودش مثال ها رو توی ۳ دسته قرار می ده! در نهایت ما مثلا می تونیم بگیم همه ی مثال هایی که در دسته ی دوم قرار گرفتن A هستند.
شاید جالب باشه بدونید گوگل هم برای دسته بندی اطلاعات از همچین روشی استفاده می کنه! البته کمی پیشرفته تر. مثلا ۱۰۰ متن اقتصادی و ۱۰۰ متن ورزشی به کامپیوتر میده و از کامپیوتر می خواد اونها رو به ۲ بخش تقسیم بندی بکنه! ورودی لغت های اون متن ها هستند. "
وای، سیاوش باورم نمیشه!
من هم همینطور. مگه می شه کامپیوتر خودش دسته بندی کنه! لطفا ادامه بدید.
" اگه اجازه بدید می خوام همین کار رو انجام بدم! "

ابزار مورد نیاز

خوب! برای این که شروع کنیم به چند مورد نیاز داریم:
  1. در مورد هوش مصنوعی و شبکه های عصبی یکم اطلاعات داشته باشید. در صورتی که آشنایی ندارید می تونید مقدمه ای بر هوش مصنوعی و مقدمه ای بر شبکه های عصبی رو مطالعه کنید.
  2. برنامه ای برای تولید الگو که ورودی شبکه ی عصبی ما خواهد بود. این برنامرو میتونید از اینجا تهیه کنید.
  3. نرم افزار JOONE Editor. عبارت JOONE مخفف Java Object Oriented Neural Engine هست. که یک ابزار قدرت مند برای بوجود آوردن و آموزش انواع شبکه های عصبی در Java هست. توی این آموزش ما از ویرایشگر این ابزار استفاده می کنیم که محیطی گرافیکی برای تولید شبکه های عصبی داره و کار با اون بسیار ساده هست. این ابزار از اینجا قابل دریافت هست. بدیهیه که برای نصب این ابزار ابتدا باید جاوا روی کامپیوتر شما نصب باشه.
  4. کمی پشتکار و حوصله.
ای بابا! من جاوا رو کامپیوترم نصب نیست! یعنی باید برم سیدیشو بخرم؟؟؟
" فکر کنم شما علاوه بر جاوا مورد ۴ رو هم نداشته باشی... در صورتی که اینترنتت پر سرعته می تونی از اینترنت هم J2SE رو دانلود کنی. "
آره اینترنتم ADSL هست!.
جدا! خونتون کجاست؟ خونه ما ADSL ساپورت نمی کنه.
خونمون دولته.
جدا؟ شمارش چنده؟
شمارش اینه: ۲۲۶۴...
" بسسههههه! اینجا قرار نیست شماره بدید به هم! "


ساخت الگوها
حالا می خوایم یک سری الگو تولید کنیم. الگو همون مثال هایی هست که گفتیم برای کامپیوتر می زنیم تا بتونه یاد بگیره.
برای این کار از برنامه ای که در شماره ی ۲ بخش قبل معرفی کردم استفاده می کنیم. این برنامه خیلی ساده کار می کنه و فقط الگو ها رو از حالت تصویری به ۰ و ۱ تبدیل می کنه.
سیاوش می تونید توضیح بدی چطور این کار انجام میشه؟
" بله حتما! اول تصویر رو به یک ماتریس ۸ در ۸ تقسیم می کنه. یعنی ۶۴ قسمت. وقتی دکمه ی سمت چپ ماوس پایینه در صورتی که ماوس از هر کدوم از اون ۶۴ بخش رد بشه اون بخش رو داخل ماتریس علامت گذاری می کنه (مقدار اون قسمت رو True می کنه). وقتی دکمه ی Learn زده می شه برنامه مقدار تمام قسمت ها رو از بالا به پایین داخل یک فایل ذخیره می کنه. مقدار هر قسمت می تونه ۰ یا False و ۱ یا True باشه. "
در صورتی که سورس این برنامرو خواستید کافیه توی بخش نظرات بگید تا براتون میل کنم.
کار با این برنامه خیلی آسون هست همونطور که توی شکل مشخصه.


کافیه الگویی که دوست دارید رو داخل فضای سفید بکشید و دکمه ی Learn رو بزنید. Textbox پایینی برای تغییر دادن آدرس فایلی هست که اطلاعات توی اون ذخیره میشه. و Textbox بالایی برای اینه که بگید این الگو چه حرفی هست که توی این مطلب نیازی به پر کردن اون نیست چون ما بحثمون یادگیری Unsupervised هست. توی مطالب بعدی برای یادگیری Supervised به این فیلد نیاز خواهیم داشت.
خوب من برای اینکه مثال پیچیده نشه ۳ حرف رو می خوام به کامپیوتر یاد بدم. A و C و Z!
برای این کار برای هر کدوم از حروف چهار مثال وارد می کنم و دکمه ی Learn رو می زنم. توی شکل زیر می تونید هر ۱۲ الگو رو ببینید.


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

تشکیل شبکه ی عصبی
خوب! حالا می خواهیم ساختار شبکه ی عصبی رو طراحی کنیم. برای این کار از JOONE Editor کمک می گیریم.
صفحه ی اول این نرم افزار به این شکل هست:


توی این مثال ما از یک لایه ی ورودی خطی ۶۴ نورونی استفاده می کنیم که هر نورون یک قسمت از ماتریسی که در بخش قبل گفتیم رو به عنوان ورودی می گیره. به عنوان خروجی هم از یک لایه ی ۳ نورونی WinnerTakeAll استفاده می کنیم. در این نوع خروجی یکی از نورون ها ۱ و بقیه ۰ خواهند بود که برای تقسیم بندی بسیار مناسب هست.

ایجاد لایه ی FileInput


برای شروع ابتدا یک لایه ی FileInput ایجاد می کنیم. توسط این ابزار می تونیم یک فایل رو به عنوان ورودی به شبکه بدیم.
روی FileInput کلیک راست کرده و در Properties اون فایل درست شده در مرحله ی قبلی رو به عنوان fileName انتخاب می کنیم و به عنوان Advanced Column Selector مقدار 1-64 رو وارد می کنیم تا برنامه متوجه بشه باید از ستون های ۱ تا ۶۴ به عنوان ورودی استفاده کنه.


ایجاد یک لایه ی خطی



مرحله ی بعدی ایجاد یک Linear Layer یا لایه ی خطی هست. بعد از ایجاد این لایه Properties اون باید به شکل زیر باشه:


همونطور که می بینید تعداد ردیف ها ۶۴ مقداردهی شده که دلیلش این هست که ۶۴ ورودی داریم.
حالا با انتخاب FileInput و کشیدن نقطه ی آبی رنگ سمت راست اون روی Linear Layer خروجی FileInput یعنی اطلاعات فایل رو به عنوان ورودی Linear Layer انتخاب می کنیم.
تا این لحظه ما یک لایه ی ۶۴ نورونه داریم که ورودی اون مقادیر مثال های تولید شده در مرحله ی قبل هست.

ایجاد لایه ی WinnerTakeAll



خوب توی این مرحله لایه ی خروجی که یک لایه ی WinnerTakeAll هست رو تولید می کنیم. Properties این لایه باید به شکل زیر تغییر پیدا کنه تا اطمینان پیدا کنیم الگوها به سه دسته تقسیم میشن:


حالا باید بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط برقرار کنیم. برای این کار باید از Kohonen Synapse استفاده کنیم و Full Synapse جواب نخواهد داد. پس روی دکمه ی Kohonen Synapse کلیک کرده و بین لایه ی خطی و لایه ی WinnerTakeAll ارتباط ایجاد می کنیم.
در آموزش های بعدی فرق انواع سیناپس ها رو بررسی خواهیم کرد.

آموزش شبکه



تا این لحظه شبکه باید به این شکل باشه. حالا می تونیم آموزش شبکرو شروع کنیم. برای این کار در منوی Tools بخش Control Panel رو انتخاب می کنیم. و در صفحه ی جدید learningRating و epochs و training pattern و learning رو به شکل زیر تغییر می دیم.

epochs تعداد دفعاتی که مرحله ی آموزش تکرار میشرو تعیین می کنه.
learningRate ضریبی هست که در یادگیری از اون استفاده می شه. بزرگ بودن اون باعث میشه میزان تغییر وزن نورون ها در هر مرحله بیشتر بشه و سرعت رسیدن به حالت مطلوب رو زیاد می کنه اما اگر مقدار اون خیلی زیاد شه شبکه واگرا خواهد شد.
training patterns هم تعداد الگو هایی که برای آموزش استفاده می شن رو نشون می ده که در این مثال ۱۲ عدد بود.
بعد از اینکه تمام تغییرات رو ایجاد کردیم دکمه ی Run رو می زنیم و منتظر می شیم تا ۱۰۰۰۰ بار عملیات یادگیری انجام بشه.

تست کردن شبکه


تبریک می گم! شما الان به کامپیوتر سه حرف A و C و Z رو یاد دادید!
اما خوب حالا باید ببینید کامپیوتر واقعا یاد گرفته یا نه.
برای این کار از یک لایه ی FileOutput استفاده می کنیم تا خروجی شبکرو داخل یک فایل ذخیره کنیم.
Properties لایه ی FileOutput باید بصورت زیر باشه:

همونطور که می بینید به عنوان fileName مقدار c:\output.txt رو دادیم. یعنی خروجی شبکه در این فایل ذخیره میشه.
حالا کافیه لایه ی WinnerTakeAll رو به لایه ی FileOutput متصل کنیم.
بعد از متصل کردن این دو لایه شکل کلی باید بصورت زیر باشه:

برای اینکه فایل خروجی ساخته بشه باید یک بار این شبکرو اجرا کنیم. برای این کار مجددا در منوی Tools بخش Control Panel رو انتخاب می کنیم و در اون learning رو False و epochs رو ۱ می کنیم تا شبکه فقط یک بار اجرا شه. پس از تغییرات این صفحه باید به شکل زیر باشه:

حالا با توجه به اینکه من اول چهار مثال A رو وارد کردم و بعد به ترتیب چهار مثال C و چهار مثال Z رو ببینیم خروجی این شبکه به چه شکل شده.
باور کردنی نیست! خروجی به این شکل در اومده:
  • 1.0;0.0;0.0
  • 1.0;0.0;0.0
  • 1.0;0.0;0.0
  • 1.0;0.0;0.0
  • 0.0;1.0;0.0
  • 0.0;1.0;0.0
  • 0.0;1.0;0.0
  • 0.0;1.0;0.0
  • 0.0;0.0;1.0
  • 0.0;0.0;1.0
  • 0.0;0.0;1.0
  • 0.0;0.0;1.0
همونطور که می بینید ۴ خط اول که مربوط به A هستن ستون اولشون ۱ هست و در چهار خط دوم ستون دوم و در چهار خط سوم ستون سوم!
این یعنی کامپیوتر بدون اینکه کسی به اون بگه کدوم مثال ها کدوم حرف هست خودش فهمیده و اون ها رو دسته بندی کرده.

ببخشید. خوب چون پشت هم دادید مثال هر حرف رو اینطوری نشده؟
" نه! کامپیوتر که نمی دونسته من می خوام مثال های هر حرف رو پشت سر هم بدم! من برای راحتی خودم این کار رو کردم. شما می تونی ورودی هاتو غیر مرتب بدی! "
دلیل خاصی داره که در A ستون اول ۱ هست و ...
" نه! ممکن بود برای A ستون دوم ۱ بشه و یا هر حالت دیگه. شما اگر امتحان کنید ممکنه تفاوت پیدا کنه. اما مهم اینه در تمام A ها یک ستون خاص مقدارش ۱ و بقیه ی ستون ها مقدارشون صفر می شه. پس یعنی کامپیوتر تونسته به خوبی تقسیم بندی کنه. "
امتحان با مثال های جدید

حالا می خوایم شبکرو با سه مثال جدید تست کنیم که در مثال های آموزشی نبوده! برای این کار من با استفاده از برنامه ی تولید الگو ۳ مثال جدید درست می کنم و به عنوان فایل ورودی در شبکه فایل جدید رو انتخاب می کنم.
توی شکل زیر سه مثال جدید رو می تونید ببینید:


برای جذابیت علاوه بر این سه مثال ۲ مثال دیگه هم که احتمالا برای یک موجود بد خط هست گذاشتم!


فایل خروجی این مثال ها از اینجا قابل دریافت هست.
به نظر شما این دو تا چه حرف هایی هستن؟

اییییووول این دو تا مثال آخریا که کپ خط علیههه!
علی؟؟؟
آره برادرمه!
چه خوب که برادرته.
آره. چپیه Zه و راستیه هم C هست.
خوب حالا بگذارید ببینیم کامپیوتر چه جوابی می ده. با توجه به اینکه اول مثال C بعد مثال Z و بعد مثال A رو وارد کردم. دو مثال بعدی هم به ترتیب مثال بد خط سمت چپ و مثال بد خط سمت راست هستند. و اما جواب:
  • 0.0;1.0;0.0
  • 0.0;0.0;1.0
  • 1.0;0.0;0.0
  • 0.0;0.0;1.0
  • 0.0;1.0;0.0
کامپیوتر سه مورد اول رو به خوبی C و Z و A تشخیص داده. و دو مورد بد خط هم به ترتیب از چپ به راست Z و C تشخیص داده!
حتی برای انسان هم سخته فهمیدن اینکه مورد های چهارم و پنجم چی هستند اما اگر خوب دقت کنید می بینید به مواردی که کامپیوتر خروجی داده نزدیک تر هستند.

کجاش سخته! من که گفتم کدوم چیه!
" خوب همه مثل شما یه برادر بد خط ندارن. "

نتیجه گیری

فکر کنم خودتون نتیجه بگیرید بهتر باشه...

به نظر من کامپیوتر خیلی با شعوره!
" کامپیوتر شعور نداره! اما ما سعی کردیم طریقه ی عملکرد مغز رو به صورت خیلی ابتدایی و به ساده ترین نحو توش شبیه سازی کنیم! "
تو مطلب امروز دیدیم که کامپیوتر تونست بدون اینکه ما براش مثال هایی بزنیم و بگیم هر کدوم چه حرفی هستند و فقط با دادن تعداد دسته ها، مثال ها رو به سه دسته همونطوری که انسان ها تقسیم می کنند تقسیم کنه. همونطور که گفتیم به این نوع دسته بندی، دسته بندی Unsupervised میگن. در مباحث بعدی مثال هایی از یادگیری و دسته بندی Supervised می زنیم تا با اون نوع هم آشنا شید.
این دفعه دیگه جدا زیاد صحبت کردم بس که موضوع جالب بود.
سلامت باشید.

منبع: سیاوش محمودیان - بلاگ - شناخت حروف توسط شبکه های عصبی
__________________
Siavash آفلاين است   پاسخ با نقل قول
از Siavash تشكر كرده اند:
Astaraki (۰۷-۳۰-۱۳۸۸), mahdigh (۰۵-۶-۱۳۸۹), R_Ebadi (۰۷-۱۸-۱۳۹۱), sg.programmer (۱۲-۹-۱۳۸۸)

  #ADS
نشان دهنده تبلیغات
تبليغگر
 
 
 
تاريخ عضويت: -
محل سكونت: -
سن: 2010
پست ها: -
 

نشان دهنده تبلیغات is online  
قديمي ۰۷-۱-۱۳۸۷, ۱۰:۲۱ قبل از ظهر   #2 (لینک دائم)
عضو جدید
 
آواتار hosin39
 
تاريخ عضويت: شهريور ۱۳۸۷
پست ها: 2
تشكرها: 1
0 تشكر در 0 پست
پيش فرض

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

همچنین مطلب شما رو در مورد هوش مصنوعی در رباتیک در آدرس زیر خوندم :

سیاوش محمودیان - بلاگ - هوش مصنوعی در رباتیک

من یک پروژه رباتیک جدید شروع کردم که برای حفظ تعادل و سایر قسمتها نیاز به استفاده از هوش مصنوعی دارم. راستش رو بخواین هنوز نمی دونم که چطوری میشه تکنیک استفاده از شبکه های عصبی رو در قالب برنامه نویسی پیاده سازی کرد ...
اون مثال در مورد تشخیص حروف تقریباً همه چیزش آماده بود ... مثلاً اگر من بخوام که توسط میکروکنترلر AVR یک شبکه عصبی ایجاد کنم آیا امکانش هست ؟ مفهوم سیناپس و نورون رو چگونه میشه در قالب برنامه نویسی پیاده سازی کرد ؟ و همچنین طریقه آموزش چگونه خواهد بود ؟

وقتی صحبت از هوش مصنوعی به میون میاد چیزی به اسم پایگاه دانش هم معرفی میشه که من اطلاً نمی دونم چگونه امکان استفاده از اون هست ...

راستش خیلی چیزها هست که باید یاد بگیرم.

میدونم که توضیح دادن در همه این موارد خیلی کار سختیه به خاطر همین چنین انتظاری ندارم ولی اگه کتاب یا مقاله و یا هر مرجعی ترجیحاً به زبان فارسی سراغ دارید لطفاً به من معرفی کنید.

ممنون
hosin39 آفلاين است   پاسخ با نقل قول
قديمي ۰۷-۲-۱۳۸۷, ۰۴:۳۴ بعد از ظهر   #3 (لینک دائم)
Administrator
 
آواتار Siavash
 
تاريخ عضويت: ارديبهشت ۱۳۸۷
محل سكونت: تهران
پست ها: 179
تشكرها: 27
439 تشكر در 108 پست
My Mood: Mehrabon
پيش فرض

خوب اينجا چند سوال مختلف وجود داره، سعي مي كنم اونها بو تفكيك كنم:
اول در مورد JOONE و مقاله ي تشخيص حروف! دقيقاً حق با شماست. در اون مقاله تقريباً همه چيز آماده بود و در كل خاصيت JOONE و بقيه ي ابزار مثل nntool در Matlab همين هست. كه كار ها رو براي شما راحت تر كنند.
فكر نكنم كار منطقي باشه كه براي يك كار تحقيقاتي در صورتي كه ابزار آماده وجود دارند بريد دوباره اون ها رو از ابتدا درست كنيد. البته دانستن اينكه پشت صحنه چي ميگذره خيلي مفيد خواهد بود. اما مفيد تر از اون استفاده از اين ابزار براي ساخت نتايج جديد هست! پس در صورتي كه مي خواهيد كار تحقيقاتي انجام بديد شايد بهتر باشه بيشتر وقتتون رو صرف اين بكنيد كه چه روش و ساختاري براي انجام تحقيقتان مفيد تر هست. اين كار هم لزوماً نيازي به دانستن كامل عملياتي كه پشت سر ابزار ميگزره نداره و كافيه چندين مثال از ساختار هاي مختلف شبكه هاي عصبي و جايي كه از اين ساختار ها استفاده شده ببينيد.

در مورد اجراي شبكه هاي عصبي در برنامه نويسي هم فريم ورك هاي خيلي خوبي وجود دارند. به عنوان مثال فريم ورك AForge.Net كه در همين انجمن هم معرفيش كردم و با يك سرچ مي تونيد پيداش كنيد. يا همين JOONE كه يك Library خيلي قدرت مند براي جاوا داره و مي تونيد در زبان برنامه نويسي جاوا از اون استفاده كنيد. در اين مثال ها كه كاملا Object Oriented هستند مي تونيد ساختار پياده شده ي نورون ها و انواع سيناپس ها رو ببينيد.

در مورد اجراي شبكه هاي عصبي در AVR: معمولاً بخش آموزش رو روي خود AVR انجام نميدن. بلكه با شبيه ساز ها و نرم افزار هاي داخلي كامپيوتر ابتدا شبكرو آموزش مي دن و بعد اون شبكرو روي AVR منتقل مي كنند. اجراي يك شبكه ي عصبي ساده خيلي كار سختي نيست و يك AVR به خوبي از پس اون بر مياد. چون يك سري if و جمع و ضرب هست. اما آموزش اون مي تونه خيلي پيچيده باشه بنابراين معمولاً در كامپيوتر اين كار رو انجام ميدن. مثلا همون روبات چهارپايي كه در هوش مصنوعي در روباتيك ديديد (كه البته اون روي خود روبات چهار پا هم يك لپتاپ داشت، اما به احتمال خيلي زياد ابتدا روي شبيه ساز Train شده بوده و بعداً روي خود روبات پترن هاي آموزش داده شدرو به وسيله ي لپتاپ اجرا تست و نهايي كردند) يا روبات هاي دو پا كه در مسابقات روبوكاپ هم يكي از ليگ هاي جالب هستند ابتدا روي كامپيوتر و با شبيه ساز آموزش مي بينند و بعداً روي روبات هاي واقعي روش هاي ياد گرفته شدرو اجرا مي كنند. چون در غير اين صورت امكان مستهلك شدن و صدمه خوردن به روبات زياد خواهد بود.

در ارتباط با پايگاه دانش: فرض كنيد مي خواين عمليات جمع رو به يك كودك آموزش بديد. بايد براي كودك كلي مثال بزنيد. مثلا 2 به علاوه ي 2 مي شود 4. 5 به علاوه ي 6 مي شود 11 و ...
به اين مجموعه اطلاعات كه براي آموزش سيستم و يادگيري شبكه بكار مي رود پايگاه دانش مي گن. مثلا به كامپيوتر 10 نوع الف و 20 نوع ب نشان ميديم تا سعي كنه اين دو حرف رو از هم تشخيص بده. به اون مجموعه اي كه براي يادگيري و تشخيص اين دو حرف به كامپيوتر داده شد پايگاه دانش مي گن.
__________________
Siavash آفلاين است   پاسخ با نقل قول
از Siavash تشكر كرده است:
ebtehaj (۱۰-۴-۱۳۹۰)
قديمي ۰۷-۳-۱۳۸۷, ۰۱:۳۷ بعد از ظهر   #4 (لینک دائم)
عضو جدید
 
آواتار hosin39
 
تاريخ عضويت: شهريور ۱۳۸۷
پست ها: 2
تشكرها: 1
0 تشكر در 0 پست
پيش فرض

خیلی ممنو از پاسخ جامع شما.

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

من دقیقاً روی یک روبات دوپا دارم کار می کنم و برای قسمتهای حفظ تعادل و راه رفتن و همچنین تشخیص تصاویر مقابل به این اطلاعات نیاز دارم.
hosin39 آفلاين است   پاسخ با نقل قول
قديمي ۰۷-۳-۱۳۸۷, ۰۶:۳۷ بعد از ظهر   #5 (لینک دائم)
Administrator
 
آواتار Siavash
 
تاريخ عضويت: ارديبهشت ۱۳۸۷
محل سكونت: تهران
پست ها: 179
تشكرها: 27
439 تشكر در 108 پست
My Mood: Mehrabon
پيش فرض

دوست عزيز، من قبلاً كمي روي روبات هاي دو پا كار كردم.
يك مثال براتون مي زنم: در حال حاضر در مسابقات روبوكاپ يك ليگ بنام Standard Platform وجود داره. كه در اون روبات هاي دو پاي استانداردي با نام نائو (Nao) وجود دارند. اين روبات ها تا جايي كه يادم هست 20 درجه ي آزادي دارن. بدون شك به خاطر بزرگ بودن فضاي حالت ها با Hard Coding نمي شود براي اين روبات ها به عنوان مثال يك Skill راه رفتن در آورد. براي همين از الگوريتم هاي يادگيري و بهينه سازي براي اين كار بايد استفاده كرد. اما همونطوري كه مي دونيد اين روبات ها بسيار حساس هستند و در هر بار زمين خوردن كمي صدمه ممكن هست ببينند. حالا اين مورد براي روبات هايي كه دست ساز هستند خيلي بيشتر هست چون اكثر اوقات بدنه ندارند و قطعات فيكس نيستند. خيلي بار ها ممكنه به خاطر يك زمين خوردن ساده از كار بيوفتند و زمان زيادي رو براي پيدا كردن ايراد و درست كردن اون صرف كنيد.

خوب حالا راه حل چيست؟ براي روبات هاي نائو چند سيمولاتر مختلف وجود داره كه دو تا از اونا تو مسابقات روبوكاپ بكار ميره. مثلاً يكي از اين سيمولاتور ها از موتور فيزيك ODE استفاده مي كنه و با استفاده از اون و اطلاعات دقيق قطعات روبات نائو (مثلاً وزن هر بخش، نوع موتور ها و ...) دقيقاً اين روبات رو در يك محيط مجازي شبيه سازي كردن. ما از اين سيمولاتور و با استفاده از الگوريتم ژنتيك و سري فوريه و يك سري قوانين براي محدود كردن فضا به اين روبات راه رفتن ياد داديم. يعني روبات به قدري زمين خورد تا بالاخره ياد بگيره راه بره. نتيجه ي نهايي تعدادي سري فوريه بود كه سرعت زاويه اي هر موتور در هر لحظه را تعيين مي كرد. كه قابل اجرا روي پروسسور هاي ضعيف هست. (سري فوريه جمع چند تا سينوس با ضريب هاي مختلف هست)

خوب براي شبكه هاي عصبي هم همينطور هست. شما ابتدا با سيمولاتور شبكه ي عصبي رو آموزش مي ديد. در نهايت يك سري وزن براي هر نورون بدست مياد. ساده ترين حالت شبكه را در نظر مي گيريم. به عنوان مثال در يك شبكه ي پرسپترون چند لايه. فرض كنيد در مجموع 20 نورون داشته باشيم. هر نورون يك وزني پيدا كرده در فرآيند آموزش. خوب حالا با توجه به شبكه ي پرسپترون مي تونيم با يك سري if و ضرب و جمع به خروجي اون دست پيدا كنيم.
اگر Perceptron رو داخل اينترنت جستجو كنيد نتايج خوبي مي گيريد. توضيح كوتاهي از اون رو در مقدمه اي بر شبكه ي عصبي مي تونيد پيدا كنيد. مي بينيد كه اجراي پرسپترون خيلي سخت نيست. كافيه ورودي هر نورون رو در وزنش جمع كنيد. در صورتي كه از Threshold بيشتر بود اين نورون خروجي داشته باشه و در غير اين صورت خروجي نداشته باشه! كه اين كار كاملا در AVR قابل انجام هست.
حالا اگر شبكه ي عصبي شما پرسپترون نباشه و پيچيده تر باشه بايد الگوريتم اجراي اون شبكرو ياد بگيريد. پس براي آموزش اون مي تونيد مثلاً از Matlab استفاده كنيد و خروجي و نحوه ي اجراي اون رو فقط داخل AVR داشته باشيد.
__________________
Siavash آفلاين است   پاسخ با نقل قول
از Siavash تشكر كرده است:
ebtehaj (۱۰-۴-۱۳۹۰)
قديمي ۰۶-۱۳-۱۳۸۹, ۰۳:۳۵ بعد از ظهر   #6 (لینک دائم)
عضو جدید
 
آواتار elnaz nasiri
 
تاريخ عضويت: مرداد ۱۳۸۹
پست ها: 1
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

سلام ،پروژه منم تشخیص حروف فارسی با استفاده از شبکه عصبی در متلبه، لطفه اگه کد این برنامه را دارین به من بدین یا راهنماییم کنین
elnaz nasiri آفلاين است   پاسخ با نقل قول
قديمي ۰۶-۳۰-۱۳۸۹, ۱۰:۵۹ قبل از ظهر   #7 (لینک دائم)
عضو جدید
 
آواتار niki
 
تاريخ عضويت: اسفند ۱۳۸۸
پست ها: 1
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

سلام
من هم دارم این پروژه رو برای اعداد دستنویس در متلب انجام می دهم . از روش های مختلف استفاده کردم
اما به جواب همگرا نمی شود.اگر مکن است را هنماییم کنید.خیلی اضطراریه چون وقت ندارم!با تشکر
ایمیل من:eshahra@gmail.com
niki آفلاين است   پاسخ با نقل قول
قديمي ۰۸-۳-۱۳۹۰, ۱۱:۳۷ بعد از ظهر   #8 (لینک دائم)
عضو جدید
 
آواتار zohreh68
 
تاريخ عضويت: آبان ۱۳۹۰
پست ها: 1
تشكرها: 0
0 تشكر در 0 پست
پيش فرض شناخت حروف توسط شبکه های عصبی

سلام من یه مقاله راجع به شناخت حروف توسط شبکه های عصبی به غیر از سایت سیاوش می خوام عجله هم دارم اگه کسی داره برام میل کنه ممنون.
zohreh_ghazi@yahoo.com
zohreh68 آفلاين است   پاسخ با نقل قول
قديمي ۰۹-۸-۱۳۹۰, ۰۱:۱۹ قبل از ظهر   #9 (لینک دائم)
عضو جدید
 
آواتار arshad_asal
 
تاريخ عضويت: آذر ۱۳۹۰
پست ها: 1
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

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

ويرايش شده توسط Astaraki; ۱۰-۳-۱۳۹۰ در ساعت ۱۲:۰۶ بعد از ظهر
arshad_asal آفلاين است   پاسخ با نقل قول
قديمي ۰۹-۲۹-۱۳۹۰, ۰۴:۳۵ بعد از ظهر   #10 (لینک دائم)
عضو جدید
 
آواتار reza_farzaneh
 
تاريخ عضويت: فروردين ۱۳۸۹
پست ها: 2
تشكرها: 0
0 تشكر در 0 پست
پيش فرض

سلام دوست عزیز خست نباشی من یک سوال دارم و این هستش که این برنامه رو می شه برای تشخیص اثر انگشت گسترش داد ؟
reza_farzaneh آفلاين است   پاسخ با نقل قول
پاسخ



كاربران در حال ديدن تاپيک: 1 (0 عضو و 1 مهمان)
 

قوانين ارسال
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is فعال
شکلکها فعال است
كد [IMG] فعال است
كدهاي HTML غير فعال است
Trackbacks are فعال
Pingbacks are فعال
Refbacks are فعال




زمان محلي شما با تنظيم GMT +3.5 هم اکنون ۱۰:۱۸ قبل از ظهر ميباشد.


Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

Teach and Learn at Hexib | Sponsored by www.Syavash.com and Product In Review

استفاده از مطالب انجمن در سایر سایت ها، تنها با ذکر انجمن هوش مصنوعي به عنوان منبع و لینک مستقیم به خود مطلب مجاز است

Inactive Reminders By Icora Web Design