ساخت یک شبکه عصبی ساده – قسمت چهارم : کلاسه بندی (۲)

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

مقاله مرتبط :

مسئله:

فرض بر این است که شما یک هوش مصنوعی ( یا انسان گرسنه ) هستید که وظیفه داده شده به شما، دسته بندی گیاهان به صورت سمی و غیر سمی می باشد، این ها گیاهانی است که با آن سروکار داریم:

 ویژگی ها:

اولین اقدام، استخراج ویژگی ها از این مجموعه گیاهان می باشد. به این معنی که چیزی برای مقایسه وجود خواهد داشت که ما برای ساده سازی مسئله در این مرحله، تعداد برگ ها را درنظر می گیریم:

کلاسه بندی دودویی:

در گام بعدی کلاسه بندی دودویی را خواهیم داشت و همانطور که از نامش مشخص است، وظیفه تغییر و کاهش مقدار ویژگی ها به یک ها و صفرها را دارد.

خطا:

تابع خطای ما صرفاً یک مقدار دودویی دیگر در قالب سمی بودن (۰) و غیر سمی بودن (۱) می باشد و از آن به عنوان راهنمای یادگیری استفاده خواهیم کرد.

آزمایش با خطا:

حال که تمام متغیرهایمان بدست آمده است، زمان آن رسیده که سیستمی برای یادگیری ایجاد کنیم و پس از آن براساس یادگیری انجام شده، گیاهان را شناسایی کنیم، بنابراین اولین کار خوردن هر کدام از گیاهان و ثبت نتیجه می باشد…خوشمزه است!

ممکن است واضح به نظر برسد که ما باید از کدام گیاه دوری کنیم که مسئله خوبیست اما همچنان نیاز به ساخت یک شبکه عصبی داریم که بعدها نیز بتواند گیاهان را برای دیگران کلاسه بندی کند، یک راه ساده برای ساخت چنین مدل شبکه ای می تواند صرفاً استفاده از ۲ نود باشد:

نود اول، نود ورودی است که وظیفه دریافت و مشاهده گیاه را دارد ( اقدامی که از طریق ویژگی های گیاهان انجام می شود )، سپس نود تصمیم گیری مطرح می شود که خروجی را براساس وزن ها محاسبه می کند.

یادگیری:

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

سپس آموزش که بوسیله افزایش وزن بدست می آید ( این عدد، نرخ یادگیری مان خواهد بود ) و خطایمان به حداقل می رسد، این خروجی آزمایش های آموزشی می باشد:

پس از انجام تنها ۶ آزمایش، شبکه ای آموزش دیده داریم، که ملاحظه می فرمایید:

آزمایش:

گام نهایی در این کلاسه بند ساده، آزمایش و ارزیابی آن می باشد که برای این کار تنها به آزمایش دو مورد براساس ویژگی های مدنظرمان نیاز داریم:

پیشروی:

ما بطور خیلی سطحی وارد مباحث کلاسه بندی شبکه عصبی شدیم، اما عناصر و مؤلفه های اساسی در اینجا مطرح شده، موارد زیر را در نظر بگیرید که برپایه شبکه عصبی ساده ما ایجاد می شود:

پیش بینی:

اگر بخواهم گیاهی با ۵ برگ و گیاه دیگری با ۲ برگ را به شما نشان بدهم، شما کدام را میل می کنید؟، به چه میزان از تصمیمتان مطمئن خواهید بود؟ دو موضوع آمار و شبکه های عصبی، در زمینه پیش بینی به یکدیگر می پیوندند.

عمومیت دادن:

با اضافه کردن ویژگی های دیگری مانند رنگ، تیغ ها، میوه ها و غیره و غیره، می توانیم به موارد بیشتری مشابه با زندگی واقعی دست پیدا کنیم، چیزی که در یادگیری ماشین کاربردی بسیار رایج است.

لایه های پنهان / الگوبندی منفی:

موارد پیچیده (خوردن ۲ گیاه می تواند نتیجه سمی حاصل کند) می تواند از طریق لایه های پنهان و سطحی کاملاً جدید و هوشمند از وزن ها و استراتژی ها به منظور حداقل سازی خطاها، مدل سازی شود و هرچه تعداد لایه هایی که اضافه می کنیم بیشتر شود، این حداقل سازی و نمایش توزیع شده گیاهان نیز سخت تر می- شود.

کد مربوط به موارد مطرح شده کجاست؟

شما می توانی به سادگی نمونه کدهای ارائه شده را در بخش دوم که درگذشته منتشر شده است، بیابید. که اساساً یک نسخه غیر برداری از مسئله اهداء کننده می باشد ( در بخش های اول و دوم با آن آشنا شده ایم )، درواقع بزرگ ترین درسی که در این قمست گرفتیم، چگونگی تعریف مسئله بوده است ( انتخاب ویژگی ها و معماری سیستم که دو چالش در این زمینه به حساب می آید).

سخن پایانی:

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

بیشتر بخوانید :

منبع Becoming Human

همچنین ببینید

فناوری تشخیص چهره و کاربردهای آن، تاریخچه تکنولوژی تشخیص چهره

فناوری تشخیص چهره و کاربردهای آن + تاریخچه

فناوری تشخیص چهره یک فناوری بیومتریک است که با استفاده از تجزیه و تحلیل الگوهایی …

7 نظر

  1. سلام ،خسته نباشید ، یه سوال داشتم و از اونجایی که انجمن ندارید مجبورم اینجا بنویسم .

    در حال کار بروی پرداز تصویر و شبکه های عصبی هستم ، پروژه بنده شناسایی پلاک خودرو هست ( فقط شناسایی ) که به صورت خیلی ساده قراره این کارو انجام بدم . حالا مشکلی که دارم اینکه که وقتی ویدئو رو با opencv میخونم به شدت کند هست ! فکر کنم چیزی حدود ۲ فریم برثانیه ! میخواستم بدونم راهکار چیه ؟ آیا مشکل از opencv هست ؟ آیا باید از کتابخونه های دیگه استفاده کنم؟ ممنون از پاسخگویی شما

    • سلام
      احتمالا در مد Debug دارید کار می کنید. اگر در مد Release کار کنید باید حداقل ۴۰-۵۰ فریم در ثانیه بتوانید ویدیو را بخوانید.
      با ++C کار می کنید یا سی شارپ یا زبان دیگر؟

      • در مد Release کار میکنم و با زبان پایتون و فریمورک کراس . نسخه های متعد opencv رو تست کردم ، حتی flag هایی مثل ffmpeg رو هم تست کردم . راهکارهای مثل استفاده از صف رو تست کردم ، وقتی از صف استفاده می کنم برای وب کم مشکل حل میشه ولی وقتی میخوام ویدئو رو از سیستم بخونم مشکل افت فریم دارم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *