پیاده سازی مدل دسته بندی تصاویر در پایتون — راهنمای کاربردی

در این مطلب، هدف آشنا کردن مخاطبان و خوانندگان با مدلهای دسته بندی تصاویر و پیادهسازی آنها در «زبان برنامهنویسی پایتون» (Python Programming Language) است. یکی از شایعترین رویکردها برای دسته بندی تصاویر، استفاده از مدلهای «یادگیری عمیق» (Deep Learning) است. یادگیری عمیق، تابعی از «هوش مصنوعی» (Artificial Intelligence) محسوب میشود که فرایندهای کاری مغز انسان را، جهت پردازش دادههای حس شده و شناسایی الگوهای موجود در آنها برای تصمیمگیری، همانندسازی میکند.
یادگیری عمیق، زیر مجموعهای از مدلهای «شبکههای عصبی مصنوعی» (Artificial Neural Networks) در حوزه «یادگیری ماشین» (Machine Learning) محسوب میشود. بنابراین، مدلهای یادگیری عمیق کلاسی از الگوریتمهای یادگیری ماشین هستند که از لایههای متعدد و چندگانه برای استخراج تدریجی «ویژگیهای سطح بالا» (High-Level Features) از دادههای خام ورودی استفاده میکنند.
به عنوان نمونه، در کاربردهایی نظیر «پردازش تصویر» (Image Processing)، لایههای پایینتر شبکه عصبی یا مدل یادگیری عمیق ممکن است ویژگیهایی نظیر «لبهها» (Edges) را تشخیص دهند، در حالی که لایههای بالاتر مفاهیم قابل فهمتر برای انسانها نظیر ارقام، حروف و یا چهره افراد را شناسایی و استخراج میکنند.
شاید در نگاه اول تصور شود که پیادهسازی یک مدل یادگیری عمیق برای دسته بندی تصاویر، منابع زیادی نیاز داشته باشد؛ از یک سو، زمان زیادی برای «آموزش» (Train) مدلهای یادگیری عمیق روی «مجموعههای داده» (Datasets) متشکل از دادههای تصویری نیاز است و از سوی دیگر، قدرت محاسباتی لازم برای آموزش یک مدل یادگیری عمیق به مراتب بیشتر از یک مدل شبکه عصبی مصنوعی مرسوم است. به عبارت دیگر، تصور شایع در میان برنامهنویسان این است که در اختیار داشتن یک کامپیوتر قدرتمند با قدرت پردازشی قابل توجه، یکی از ملزومات آموزش مدلهای یادگیری عمیق است.
در این مطلب، برای طراحی و آموزش یک مدل یادگیری عمیق در زبان پایتون، از سرویس محاسبات ابری گوگل به نام Google Colab notebook استفاده میشود. سرویس Google Colab notebook امکانات پردازشی بسیار قدرتمندی برای پیادهسازی مدلهای یادگیری عمیق و آموزش آنها در زبان پایتون فراهم میکند.
شایان توجه است که برای پیادهسازی یک سیستم دستهبندی تصاویر و آموزش آن، نیازی به در اختیار داشتن یک سیستم قدرتمند محاسبات (به صورت فیزیکی) و صرف زمان زیاد برای پیادهسازی و آموزش آن وجود ندارد. به عنوان نمونه، برخی از اعضای پلتفرم محبوب Fast.ai الگوریتمی را جهت دسته بندی تصاویر طراحی کردند که بر اساس معیارهای ارزیابی معروف نظیر DAWNbench، از کدهای گوگل بهتر عمل میکند.
مجموعه داده استفاده شده برای آموزش الگوریتم یادگیری توسعه داده شده توسط اعضای پلتفرم Fast.ai، مجموعه داده معروف Imagenet است. هزینه آموزش این مدل با استفاده از سیستمهای محاسبات ابری عمومی (اجاره 16 سیستم محاسبات ابری شرکت آمازون)، چیزی حدود 40 دلار برآورد شده است. همچنین، برای آموزش مدل الگوریتم یادگیری توسعه داده شده توسط مجموعه داده Imagenet به چیزی حدود 18 دقیقه زمان نیاز است.
حوزه یادگیری عمیق بسیار گسترده است. در نتیجه، در این مطلب به جای اینکه روی حوزه یادگیری عمیق، مفاهیم و مدلهای موجود تمرکز شود، روی چالش پیادهسازی یک سیستم دسته بندی تصاویر تمرکز خواهد شد. علاوه بر این، در این مطلب از یک معماری یادگیری عمیق بسیار ساده برای دستیابی به «دقت» (Accuracy) بسیار مناسب استفاده میشود. برای پیادهسازی سیستم دسته بندی تصاویر و ارزیابی عملکرد آن، از زبان برنامهنویسی پایتون استفاده میشود.
بیان مسأله در چالش پیادهسازی سیستم دسته بندی تصاویر
بیش از 25 درصد درآمد شرکتهای فعال در حوزه «تجارت الکترونیک» (E-Commerce) به فروش پوشاک و تجهیزات جانبی مرتبط تعلق دارد. یکی از مسائل عمده شرکتهای فعال در این حوزه، «طبقهبندی کردن» (Categorizing) پوشاک با استفاده از تصاویر آنها است؛ به ویژه، زمانی که طبقهبندیهای ارائه شده توسط برندهای مختلف پوشاک، ناسازگاری بسیار زیادی از خود نشان میدهند.
بنابراین، پیادهسازی سیستمهای دسته بندی تصاویر جهت طبقهبندی پوشاک (با استفاده از تصاویر آنها)، یکی از چالشهایی است که میتواند توسط محققان فعال در حوزه یادگیری عمیق و «بینایی کامپیوتر» (Computer Vision) مورد کاوش قرار بگیرد.
«مجموعه داده» (Dataset) قابل استفاده برای پیادهسازی سیستمهای دسته بندی تصاویر جهت طبقه بندی تصاویر پوشاک، مجموعه داده Fashion MNIST نام دارد. مجموعه داده MNIST، یک مجموعه داده بسیار معروف برای پیادهسازی سیستمهای دسته بندی تصاویر «ارقام» (Digits) و شناسایی اعداد موجود در تصاویر محسوب میشود. در این مجموعه داده، هر کدام از تصاویر نشان دهنده یک عدد (یا رقم) بین 0 تا 9 است. مجموعه داده Fashion MNIST، معادل مجموعه داده MNIST محسوب میشود؛ با این تفاوت که در این مجموعه داده، هر تصویر نشان دهنده یک نوع پوشاک (پیراهن، شلوار و سایر موارد) است.
دسته بندی تصاویر چیست؟
به تصویر زیر دقت کنید:
انسانها به راحتی قادر خواهند بود این تصویر (اتومبیل) را شناسایی کنند. اگر از کاربر خواسته شود که یک قدم به عقب برگردد و چگونگی رسیدن به این نتیجهگیری را شرح دهد، بدون شک اظهار میکند که با نگاه کردن به تصویر توانسته است دستهبندی صحیح تصویر را شناسایی کند (در این مورد خاص، کاربر تصویر نمایش داده شده را در کلاس اتومبیل دستهبندی کرده است). سیستمهای هوشمند کامپیوتری که بتوانند فعالیت مشابهی را انجام دهند، به عنوان سیستمهای دسته بندی تصاویر شناخته میشوند.
در چالش دسته بندی تصاویر، به طور بالقوه میتوان تصاویر را در n کلاس یا طبقه دستهبندی کرد. بررسی و دستهبندی «دستی» (Manual) تصاویر، کار بسیار سخت و خسته کنندهای است. این چالش، زمانی که حجم زیادی از تصاویر (به عنوان نمونه، 10 هزار یا 100 هزار تصویر) باید بررسی و دستهبندی شوند، عملا غیر ممکن خواهد شد. در چنین حالتی، نقش محققان فعال در حوزه یادگیری عمیق و بینایی کامپیوتر، بیش از پیش پر رنگتر خواهد شد؛ چنین افرادی قادر خواهند بود سیستمهایی را طراحی کنند که میتوانند فرایند دستهبندی تصاویر را خودکار کنند و از این طریق، تصاویر را در کلاس یا طبقه صحیح دستهبندی کنند.
«اتومبیلهای خودران» (Self-Driving Automobiles) نمونه بارز کاربردهای «جهان واقعی» (Real World) سیستمهای دسته بندی تصاویر محسوب میشوند. برای تکامل و ارتقاء فناوری اتومبیلهای خودران، میتوان سیستمهای دستهبندی تصاویر تولید کرد که قادر باشند «اشیاء» (Objects) مختلفی نظیر اتومبیل، اشخاص، اشیاء در حال حرکت و سایر موارد را شناسایی کنند. با این حال، موارد کاربرد سیستمهای دسته بندی تصاویر به این مورد خاص ختم نمیشود و از این دسته از سیستمها میتوان در کاربردهای مختلفی و برای خودکارسازی وظایف گوناگون استفاده کرد.
بنابراین، تا اینجا مفهوم سیستمهای دسته بندی تصاویر مشخص شد. در بخشهای بعدی، چگونگی پیادهسازی چنین سیستمهایی، پیشنیازهای لازم برای پیادهسازی آنها و در نهایت، پیادهسازی آنها در زبان پایتون شرح داده خواهد شد.
راهاندازی ساختار دادههای تصویری
برای این بتوان بر چالش پیادهسازی سیستمهای دسته بندی تصاویر با استفاده از روشهای یادگیری عمیق و بینایی ماشین غلبه کرد، نیاز است تا دادههای تصویری لازم برای پیادهسازی چنین سیستمهایی در قالب خاصی آمادهسازی شوند. چگونگی انجام چنین کاری در بخشهای بعدی توضیحی داده خواهد شد.
برای آمادهسازی دادههای لازم برای پیادهسازی سیستم دسته بندی تصاویر نیاز است تا دو پوشه توسط کاربر تولید شود؛ یک پوشه برای نگهداری «دادههای مجموعه آموزشی» (Train Set) و یک پوشه دیگر نیز برای نگهداری «دادههای مجموعه تست» (Test Data). در پوشه مرتبط با دادههای مجموعه آموزشی، یک فایل CSV. و یک پوشه حاوی تصاویر وجود خواهد داشت:
- فایل CSV.، نام تمامی دادههای موجود در مجموعه آموزشی و برچسب واقعی متناظر آنها را شامل خواهد شد.
- در پوشه حاوی تصاویر نیز تمامی تصاویر آموزشی لازم برای پیادهسازی (آموزش) سیستم دسته بندی تصاویر ذخیره خواهند شد.
فایل CSV. مرتبط با دادههای مجموعه تست با فایل CSV. دادههای آموزشی متفاوت خواهد بود. فایل CSV. دادههای تست، نام تمامی دادههای موجود در مجموعه تست را شامل خواهد شد ولی برخلاف دادههای مجموعه آموزشی، برچسب واقعی هیچکدام از دادههای تست در این مجموعه وجود نخواهد داشت. به عبارت دیگر، ابتدا مدل دسته بندی تصاویر روی دادههای موجود در مجموعه آموزشی، آموزش میبیند. سپس، در مرحله تست مدل پیادهسازی شده، برچسب متناظر با هر کدام از دادههای موجود در مجموعه تست پیشبینی میشود.
بنابراین، بسیار حیاتی است که دادههای آموزشی و تست لازم برای پیادهسازی و ارزیابی مدل دسته بندی تصاویر، در قالب شرح داده شده آمادهسازی شوند. در غیر این صورت، ممکن است نتایج حاصل از آموزش و ارزیابی مدل قابل اطمینان نباشد.
مراحل لازم برای ساختن مدل دسته بندی تصاویر
پیش از اینکه کد نویسی مدل دسته بندی تصاویر توسط روشهای یادگیری عمیق در زبان پایتون شرح داده شود، فرایندهای لازم برای طراحی مدل دسته بندی تصاویر مورد بررسی قرار میگیرند.
فرایندهای لازم برای طراحی مدل دسته بندی تصاویر را میتوان به 4 مرحله مجزا تقسیمبندی کرد:
- بارگیری و پیش پردازش دادهها
- تعریف معماری مدل یادگیری عمیق
- آموزش مدل دسته بندی تصاویر با استفاده از دادههای آموزشی
- تخمین زدن عملکرد مدل طراحی شده
در ادامه، هر کدام از این مراحل، به همراه جزئیات آنها شرح داده میشوند. آشنایی با جزئیات هر کدام از این مراحل، برای تضمین عملکرد بهینه سیستم دسته بندی تصاویر حیاتی است. برای تضمین عملکرد بهینه سیستم، بعضا لازم است پس از هر تکرار، مراحل پیادهسازی سیستم بازبینی و پارامترهای مدل «تنظیم دقیق» (Fine-Tune) شوند و در نهایت، مدل پیادهسازی دوباره اجرا شود. آشنایی با جزئیات هر کدام از مراحل بالا، نقش مهمی در شتاب بخشیدن به فرایند تنظیم دقیق پارامترهای مدل و تضمین عملکرد بهینه سیستم دسته بندی تصاویر خواهد داشت.
مرحله اول: بارگیری و پیش پردازش دادهها
هر چقدر دادههای بیشتری برای آموزش مدل طراحی شده در اختیار سیستم دسته بندی تصاویر قرار بگیرد، احتمال اینکه عملکرد و دقت سیستم در دسته بندی تصاویر افزایش یابد بیشتر میشود. همچنین، بسته به معماری انتخاب شده برای طراحی مدل دستهبندی متن، شکل دادههای لازم برای آموزش سیستم دسته بندی تصاویر نیز تغییر پیدا خواهد کرد. بنابراین، پیش پردازش دادهها، یکی از حیاتیترین مراحل پیادهسازی سیستمهای مبتنی بر یادگیری ماشین محسوب میشود.
یکی دیگر از مراحل مهم در فرایند پیادهسازی سیستم دسته بندی تصاویر، «صحتسنجی» (Validation) مدل آموزش داده شده است. به عبارت دیگر، برای مشخص کردن عملکرد سیستم دسته بندی تصاویر روی دادههای «دیده نشده» (Unseen) و پیش از تست کردن سیستم روی دادههای تست، نیاز است تا یک «مجموعه داده صحتسنجی» (Validation Dataset) ایجاد شود. برای انجام چنین کاری میتوان دادههای آموزشی را تقسیم بندی کرد و بخشی از این دادهها را برای صحتسنجی عملکرد سیستم دسته بندی تصاویر استفاده کرد.
به بیان سادهتر، در مرحله اول سیستم دسته بندی تصاویر، با استفاده از دادههای آموزشی، آموزش داده میشود. در مرحله بعد، از دادههای صحتسنجی برای ارزیابی عملکرد سیستم پیش از تست آن استفاده میشود. در صورتی که عملکرد سیستم روی دادههای صحتسنجی رضایت بخش باشد، از سیستم پیادهسازی شده برای پیشبینی برچسب دادههای تست استفاده میشود.
مرحله دوم: تعریف معماری مدل یادگیری عمیق
یکی دیگر از مراحل مهم در فرایند پیادهسازی مدل یادگیری عمیق، تعریف معماری مدل یادگیری عمیق جهت دسته بندی تصاویر است.
در این مرحله، جزئیات طراحی مدل یادگیری عمیق از طریق پاسخ به سؤالهای زیر مشخص میشود:
- در مدل یادگیری عمیق، به چند «لایه پیچشی» (Convolutional Layer) نیاز است تا عملکرد بهینه سیستم دسته بندی تصاویر تضمین شود.
- برای هر کدام از لایهها، باید از کدام یک از «توابع فعالسازی» (Activation Function) استفاده کرد.
- هر کدام از لایههای نهان مدل یادگیری عمیق، باید متشکل از چند «نرون» (Neuron) یا نود نهان باشد.
این سؤالات و دیگر سؤالات مشابه، «ابَرپارامترهای» (Hyperparameter) مدل یادگیری عمیق را مشخص میکند. مشخص کردن ابَرپارامترهای بهینه برای سیستم دسته بندی تصاویر، نقش مهمی در افزایش کیفیت پیشبینیهای انجام شده روی تصاویر مجموعه داده تست خواهد داشت.
شاید سؤالی که در اینجا برای کاربران، خوانندگان و مخاطبان این مطلب پیش بیاید این باشد که چگونه میتوان بهینهترین مقادیر را برای ابَرپارامترهای مدل یادگیری عمیق انتخاب کرد. دو راه عمده برای مشخص کردن مقادیر مناسب برای ابَرپارامترهای مدل یادگیری عمیق عبارتند از:
- مطالعه مقالات تحقیقاتی و پژوهشی مرتبط و استنتاج مقادیر مناسب برای ابَرپارامترهای مدل یادگیری عمیق.
- آزمودن سیستم بر اساس مقادیر مختلف ابَرپارامترهای مدل و مشخص کردن ابَرپارامترهایی که بهترین عملکرد را برای سیستم به ارمغان میآورند (این روش، بار محاسباتی و زمان پردازشی زیادی را به سیتم تحمیل میکند).
مرحله سوم: آموزش مدل دسته بندی تصاویر با استفاده از دادههای آموزشی
پیش از آغاز مرحله آموزش مدل یادگیری عمیق، لازم است پیشنیازهای زیر در اختیار سیستم قرار گرفته شود:
- تصاویر آموزشی و برچسبهای واقعی متناظر با هر کدام از دادههای آموزشی.
- تصاویر لازم برای صحتسنجی مدل دسته بندی تصاویر و برچسبهای واقعی متناظر با هر کدام از دادههای صحتسنجی (از برچسبهای متناظر با هر کدام از دادههای صحت سنجی، تنها برای صحتسنجی مدل آموزش داده شده استفاده میشود و نه در طول فرایند آموزش مدل دسته بندی تصاویر).
با در اختیار داشتن پیشنیازهای تعریف شده، برای آموزش مدل دسته بندی تصاویر، لازم است مراحل زیر دنبال شوند:
- آموزش دادن مدل یادگیری عمیق بر اساس دادههای آموزشی و برچسب واقعی آنها.
- صحتسنجی مدل دسته بندی تصاویر بر اساس برچسبهای واقعی متناظر با هر کدام از دادههای صحتسنجی.
همچنین، در این مرحله تعداد «تکرارهای» (Epoch) لازم برای آموزش مدل یادگیری عمیق مشخص میشود. در این مطلب و جهت آموزش مدل دسته بندی تصاویر، تعداد تکرارها برابر 100 در نظر گرفته شده است.
مرحله چهارم: تخمین زدن عملکرد مدل طراحی شده
در مرحله آخر، دادههای (تصاویر) مجموعه تست در سیستم دسته بندی تصاویر بارگذاری و پیش پردازش میشوند. سپس، برچسب هر یک از تصاویر مجموعه تست توسط مدل آموزش داده شده پیشبینی میشود.
بنابراین، تا اینجا مراحل لازم برای پیادهسازی یک سیستم دسته بندی تصاویر جهت «شناسایی پوشاک» (Identifying the Apparels) ارائه شده است. همانطور که پیش از این نیز اشاره شد، هدف این سیستم دسته بندی تصاویر وارد شده به سیستم بر اساس نوع پوشاک (شلوار، پیراهن و سایر موارد) است.
در مجموعه داده Fashion MNIST، هفتاد هزار تصویر وجود دارد که 60 هزار تصویر در مجموعه آموزشی و 10 هزار تصویر نیز در مجموعه تست قرار گرفته است. دادههای موجود در مجموعه آموزشی، بسته به نوع پوشاک، در 10 کلاس از پیش تعیین شده دستهبندی شدهاند و برچسب آنها مشخص شده است. برچسب دادههای موجود در مجموعه تست نیز از دید سیستم مخفی شده است.
برای پیادهسازی سیستم دسته بندی تصاویر و طراحی مدل یادگیری عمیق، از سرویس محاسبات ابری گوگل (Google Colab notebook) استفاده میشود. سرویس Google Colab notebook امکانات پردازشی مبتنی بر «واحد پردازش گرافیکی» (Graphical Processing Unit) را جهت آموزش مدلهای یادگیری عمیق در اختیار کاربران قرار میدهد.
مراحل لازم برای طراحی مدل یادگیری عمیق در زبان پایتون
برای طراحی، آموزش و پیشبینی دسته بندی تصاویر با استفاده از زبان برنامه برنامهنویسی پایتون، دنبال کردن مراحل زیر ضروری است:
- آمادهسازی Google Colab.
- وارد (import) کردن کتابخانههای برنامهنویسی لازم برای طراحی، آموزش و پیشبینی دسته بندی تصاویر.
- بارگذاری و پیش پردازش دادهها (تصاویر).
- تولید مجموعه داده صحتسنجی جهت صحتسنجی عملکرد مدل آموزشی.
- تعریف و طراحی ساختار مدل یادگیری عمیق.
- آموزش مدل یادگیری عمیق.
- پیشبینی برچسب دادههای موجود در مجموعه تست.
مرحله اول: آمادهسازی Google Colab
در این مطلب، دادههای لازم برای آموزش و تست مدل یادگیری عمیق، از لینک Google Drive وارد سیستم خواهند شد.
بنابراین، برای استفاده از لینکهای Google Drive لازم است تا تعدادی خط کد به Google Colab notebook اضافه شود. در نتیجه، ابتدا یک Python 3 notebook جدید در Google Colab notebook ایجاد و قطعه کدهای زیر اضافه میشود:
pip install PyDrive
این دستور، PyDrive را نصب خواهد کرد. در مرحله بعد، کتابخانههای برنامهنویسی لازم برای دریافت دادهها از لینک Google Drive، توسط قطعه کدهای زیر import میشوند:
import os from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from google.colab import auth from oauth2client.client import GoogleCredentials
سپس، یک متغیر Drive برای دسترسی به Google Drive تولید خواهد شد.
auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth)
برای دانلود فایل مجموعه داده Fashion MNIST، از ID فایل آپلود شده در Google Drive استفاده میشود.
download = drive.CreateFile({'id': '1BZOv422XJvxFUnGh-0xVeSvgFgqVY45q'})
شایان توجه است که مقدار پارامتر id در کد بالا، باید با ID فایل آپلود شده در Google Drive جایگزین شود. با اجرای قطعه کد زیر، فایل train_LbELtWX.zip دانلود و از حالت فشرده خارج میشود:
download.GetContentFile('train_LbELtWX.zip') !unzip train_LbELtWX.zip
شایان توجه است که قطعه کدهای مرحله اول، باید در تمامی دفعاتی که Google Colab notebook آغاز به کار میکند، اجرا شوند:
مرحله دوم: وارد (import) کردن کتابخانههای برنامهنویسی لازم
در این مرحله، کتابخانههای برنامهنویسی که در فاز ساختن مدل یادگیری عمیق مورد نیاز هستند، توسط قطعه کدهای زیر import میشوند:
import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.utils import to_categorical from keras.preprocessing import image import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from keras.utils import to_categorical from tqdm import tqdm
مرحله سوم: بارگذاری و پیش پردازش دادهها
همانطور که پیش از این نیز اشاره شد، مرحله پیش پردازش دادهها یکی از مهمترین مراحل پیادهسازی مدل یادگیری عمیق جهت دسته بندی تصاویر محسوب میشود.
پس از بارگذاری دادهها در سیستم، لازم است تا این دادهها پیش پردازش شوند تا بتوان آنها را برای آموزش مدل یادگیری عمیق مورد استفاده قرار داد. ابتدا دادههای آموزش در سیستم بارگذاری میشوند:
train = pd.read_csv('train.csv')
سپس، تصاویر آموزشی خوانده و در یک لیست نگهداری میشوند. در نهایت نیز، لیست تولید شده به ساختار دادهای آرایه از نوع numpy تبدیل میشود:
# We have grayscale images, so while loading the images we will keep grayscale=True, if you have RGB images, you should set grayscale as False train_image = [] for i in tqdm(range(train.shape[0])): img = image.load_img('train/'+train['id'][i].astype('str')+'.png', target_size=(28,28,1), grayscale=True) img = image.img_to_array(img) img = img/255 train_image.append(img) X = np.array(train_image)
از آنجایی دستهبندی تصاویر پوشاک، یک «مسأله دستهبندی چندکلاسه» (Multi-class Classification Problem) محسوب میشود (هر یک از دادهها قرار است در یکی از ده کلاس از پیش تعریف شده در مجموعه داده Fashion MNIST دستهبندی شوند)، از روش one-hot برای «کدبندی» (Encoding) متغیر «هدف» (Target) مسأله استفاده میشود:
y=train['label'].values y = to_categorical(y)
مرحله چهارم: تولید مجموعه داده صحتسنجی از روی مجموعه آموزشی
در این مرحله با استفاده از قطعه کد زیر، مجموعه داده لازم جهت صحتسنجی عملکرد مدل آموزشی، از روی دادههای آموزشی ساخته میشود.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)
مرحله پنجم: تعریف و طراحی ساختار مدل یادگیری عمیق
این بخش، یکی از مؤلفههای اصلی پیادهسازی مدل یادگیری عمیق جهت دسته بندی تصاویر محسوب میشود.
در این مرحله، یک مدل یادگیری عمیق با دو لایه پیچشی، یک «لایه نهان متراکم» (Dense Hidden Layer) و یک لایه خروجی تولید خواهد شد.
model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=(28,28,1))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax'))
در مرحله بعد، مدل طراحی شده با استفاده از قطعه کدهای بالا، «کامپایل» (Compile) میشود.
model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
مرحله ششم: آموزش مدل یادگیری عمیق
در این مرحله، از مجموعه داده آموزشی برای آموزش مدل یادگیری عمیق و از مجموعه داده صحتسنجی برای صحتسنجی عملکرد مدل آموزش داده شده استفاده میشود:
model.fit(X_train, y_train, epochs=100, validation_data=(X_test, y_test))
مرحله هفتم: پیشبینی برچسب دادههای موجود در مجموعه تست
برای پیشبینی برچسب دادههای موجود در مجموعه تست، ابتدا لازم است تا تمامی مراحل لازم برای پردازش دادههای موجود در مجموعه آموزشی طی شود (بارگذاری و پیشپردازش دادههای موجود در مجموعه تست).
سپس، از تابع ()model.predict_classes برای پیشبینی برچسب کلاسی دادههای موجود در مجموعه تست استفاده میشود.
download = drive.CreateFile({'id': '1KuyWGFEpj7Fr2DgBsW8qsWvjqEzfoJBY'}) download.GetContentFile('test_ScVgIM0.zip') !unzip test_ScVgIM0.zip
در مرحله بعد، دادههای موجود در مجموعه تست وارد (import) سیستم میشوند:
test = pd.read_csv('test.csv')
سپس، تمامی دادههای موجود در مجموعه تست خوانده و ذخیره میشوند:
test_image = [] for i in tqdm(range(test.shape[0])): img = image.load_img('test/'+test['id'][i].astype('str')+'.png', target_size=(28,28,1), grayscale=True) img = image.img_to_array(img) img = img/255 test_image.append(img) test = np.array(test_image)
در مرحله آخر، از تابع ()model.predict_classes برای پیشبینی برچسب کلاسی دادههای موجود در مجموعه تست استفاده میشود:
# making predictions prediction = model.predict_classes(test)
پس از اجرای دستور بالا، برچسب کلاسی تمامی دادههای موجود در مجموعه تست در خروجی نمایش داده میشود. همچنین، این امکان برای کاربران و برنامهنویسان فراهم شده است تا با استفاده از تکنیکهایی نظیر Hyperparameter Tuning و Regularization، عملکرد و دقت مدل دسته بندی تصاویر را افزایش دهند.
استفاده از مدل دسته بندی تصاویر برای تشخیص ارقام در عکسها
در این بخش، از مدل دسته بندی تصاویر برای چالش دیگری استفاده میشود؛ تشخیص ارقام در تصاویر. در این چالش، هدف شناسایی عدد یا رقم در تصویر داده شده است. برای این کار، از یک مجموعه داده متشکل از 70 هزار تصویر استفاده میشود؛ 49 هزار تصویر در مجموعه داده آموزشی و 21 هزار تصویر نیز در مجموعه داده تست قرار دارند (تصاویر مجموعه داده تست برچسبگذاری نشدهاند). هدف سیستم دسته بندی تصاویر و مدل یادگیری عمیق آموزش داده شده، شناسایی یا پیشبینی کلاس تصاویر برچسبگذاری نشده است.
برای پیادهسازی سیستم دسته بندی تصاویر جهت تشخیص ارقام، باز هم از سرویس محاسبات ابری گوگل (Google Colab notebook) استفاده میشود. برای چنین کاری کافی است یک Python 3 notebook جدید در Google Colab notebook ایجاد و قطعه کدهای زیر اجرا شوند:
# Setting up Colab !pip install PyDrive
import os from pydrive.auth import GoogleAuth from pydrive.drive import GoogleDrive from google.colab import auth from oauth2client.client import GoogleCredentials
auth.authenticate_user() gauth = GoogleAuth() gauth.credentials = GoogleCredentials.get_application_default() drive = GoogleDrive(gauth)
# Replace the id and filename in the below codes download = drive.CreateFile({'id': '1ZCzHDAfwgLdQke_GNnHp_4OheRRtNPs-'}) download.GetContentFile('Train_UQcUa52.zip') !unzip Train_UQcUa52.zip
# Importing libraries import keras from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.utils import to_categorical from keras.preprocessing import image import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from keras.utils import to_categorical from tqdm import tqdm
train = pd.read_csv('train.csv')
# Reading the training images train_image = [] for i in tqdm(range(train.shape[0])): img = image.load_img('Images/train/'+train['filename'][i], target_size=(28,28,1), grayscale=True) img = image.img_to_array(img) img = img/255 train_image.append(img) X = np.array(train_image)
# Creating the target variable y=train['label'].values y = to_categorical(y)
# Creating validation set X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)
# Define the model structure model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=(28,28,1))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax'))
# Compile the model model.compile(loss='categorical_crossentropy',optimizer='Adam',metrics=['accuracy'])
# Training the model model.fit(X_train, y_train, epochs=100, validation_data=(X_test, y_test))
download = drive.CreateFile({'id': '1zHJR6yiI06ao-UAh_LXZQRIOzBO3sNDq'}) download.GetContentFile('Test_fCbTej3.csv')
test_file = pd.read_csv('Test_fCbTej3.csv')
test_image = [] for i in tqdm(range(test_file.shape[0])): img = image.load_img('Images/test/'+test_file['filename'][i], target_size=(28,28,1), grayscale=True) img = image.img_to_array(img) img = img/255 test_image.append(img) test = np.array(test_image)
prediction = model.predict_classes(test)
جمعبندی
در این مطلب، با مبحث مدلهای دسته بندی تصاویر و پیادهسازی آنها در «زبان برنامهنویسی پایتون» (Python Programming Language) آشنا شدید. یکی از باورهای غلط در مورد پیادهسازی روشهای یادگیری عمیق، نیاز به دسترسی فیزیکی به یک سیستم پردازشی بسیار قوی است.
در این مطلب، برای طراحی و آموزش یک مدل یادگیری عمیق در زبان پایتون، از سرویس محاسبات ابری گوگل به نام Google Colab notebook استفاده شده است. سرویس Google Colab notebook امکانات پردازشی بسیار قدرتمندی برای پیادهسازی مدلهای یادگیری عمیق و آموزش آنها در زبان پایتون (و دیگر زبانهای برنامهنویسی) فراهم میکند.
استفاده از سرویسهای محاسبات ابری نظیر Google Colab سبب میشود تا بتوان در مدت زمان بسیار کوتاهی، یک مدل دسته بندی تصاویر را آموزش داد و از آن برای پیش بینی برچسب کلاسی تصاویر استفاده کرد.
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای دادهکاوی و یادگیری ماشین
- آموزش اصول و روشهای دادهکاوی (Data Mining)
- مجموعه آموزشهای هوش مصنوعی
- پرسپترون چند لایه در پایتون — راهنمای کاربردی
- پیشبینی قیمت بیت کوین با شبکه عصبی — راهنمای کاربردی
- کدنویسی شبکه های عصبی مصنوعی چند لایه در پایتون — راهنمای کامل
- تفسیر مدل های یادگیری عمیق در بینایی کامپیوتر — راهنمای جامع
^^
سلام آیا همین روند را می توان برای مسئله پیش بینی که ساختار رگرسیون دارند انجام داد؟