یادگیری عمیق با کراس - بخش اول (مقدمه)


به نام خدا

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

کراس یک چهارچوب سطح بالا یادگیری عمیق پایتونی است که توسط آقای François Chollet در سال 2015 تأسیس شده. کراس چهارچوبی است که با آن و تنها با چند خط کد می‌توانیم برای ساختن شبکه‌های عصبی استفاده کنیم. البته کراس همه این کارها را خودش به تنهایی انجام نمی‌دهد، در حقیقت کراس یک فرانت‌اند (front-end) برای فریمورک های یادگیری عمیق تنسرفلو، CNTK و (مرحوم) تیانو است و آن‌ها پشت شبکه‌های عصبی را می‌سازند و آموزش می‌دهند و برای همین به آن یک چهارچوب سطح بالا می گوییم چون کراس پیچیدگی استفاده از این کتابخانه‌ها را تا حد خوبی حذف می‌کند. یک ویژگی خاص دیگر کراس این است که محدود به یک کتابخانه یادگیری عمیق نیست و همانطور که گفتیم می‌توانیم از تنسرفلو، CNTK و یا تیانو برای محاسبات پشت پرده آن استفاده کنیم.

توجه: کراس برای اولین بار برای پایتون توسعه داده شده است ولی اگر کاربر R هستید اینترفیس کتابخانه کراس برای زبان R هم چند وقتی است که در دسترس قرار گرفته است.

تعداد زیادی فریمورک توسط شرکت‌ها، دانشگاه‌ها و افراد مختلفی توسعه داده شده‌اند ولی اگر از هر متخصص یادگیری عمیق بپرسید که برای شروع چه فریمورک یادگیری عمیق را یاد بگیرم احتمالاً همه آن‌ها به شما جواب می‌دهند که با کراس شروع به کار کنید و بعداً اگر لازم شد (شاید هرگز) سمت فریمورک هایی مثل تنسرفلوبروید. یک دلیل این محبوبیت کراس را در ابتدای پست گفتم و آن این بود که کراس انعطاف پذیری زیادی در استفاده از فریمورک های سطح پائین یادگیری عمیق محبوبی مثل تنسرفلو و CNTK دارد که تجربه کاربری فوق العاده و ساده ای را به کاربر می‌دهد و کاربر لازم نیست که نگران برخی از جزئیات وقت گیر باشد. علاوه بر این، مزیت دیگر کراس این است که به طور وسیعی هم توسط افراد آکادمیک و هم شرکت‌ها استفاده می‌شود و جامعه توسعه دهنده‌های آن هم پویا و بزرگ است. به علاوه چون کراس با پلتفرم‌های مختلفی سازگار است گزینه‌های بیشتری هم در اختیار داریم. به طور مثال، هم می‌توانیم کراس را بر روی سخت افزارهای مختلف مثل CPU، GPU و TPU (سخت افزار مخصوص یادگیری عمیق گوگل) و حتی سیستم‌های عامل تلفن همراه اجرا کنیم.

شاید بتوانیم یکی از مهم‌ترین ویژگی‌های کراس را هم این بدانیم که در طراحی مدل‌ها در کراس بهترین رویه‌های (best practices) یادگیری عمیق در نظر گرفته شده‌اند و به صورت پیشفرض تنظیمات مورد استفاده در بسیاری از به صورت پیشفرض مدل‌های کراس دارای بهترین تنطیمات مثل توابع فعال سازی و اندازه دسته که معمولاً در اغلب موارد نتایج خوبی به ما می‌دهند، هستند. به علاوه در کراس مجموعه ای از مدل‌های از قبل آموزش داده شده مثل مدل ResNet50 که بر روی دیتاست ImageNet آموزش داده شده است وجود دارند که کار ما را برای انتقال یادگیری به مراتب ساده تر می‌کنند.

با این وجود همیشه استفاده از کراس شاید بهترین گزینه نباشد و باید بدانیم چه زمانی باید و چه زمانی نباید از آن استفاده کنیم. در مواردی مانند کاربردهای آموزشی و تحقیقاتی یا ساخت پروتوتایپ استفاده از کراس گزیته بهتری است ولی به طور مثال، وقتی با موارد زیر رو مواجه هستیم بهتر است به جای کراس از یک فریمورک سطح پائین تر مثل تنسرفلواستفاده کنیم.

  • اگر بخواهیم روی جزئیات مدل خودمان خیلی دقیق کار کنیم یا بخواهیم مدل‌های جدید یادگیری ماشینی را امتحان کنیم.
  • اگر بخواهیم یک سیستم با مقیاس پذیری بالا و برای پشتیبانی از تعداد زیادی کاربر ایجاد کنیم.
  • اگر محدودیت‌هایی که در حافظه و قدرت پردازشی داریم از محدودیتی که صرف زمان کدنویسی می‌کنیم مهم تر باشند.

نصب کراس

تا الان درباره مزیت ها و قابلیت های کراس گفتیم حالا نوبت به نصب کراس می رسد. نصب کراس در پایتون بسیار ساده است و کافی است که با دستور pipآن را به صورت زیر نصب کنیم.

pip install keras

به علاوه می توانیم به صورت مستقیم از گیت هاب کراس آن را دانلود و نصب کنیم.

git clone https://github.com/keras-team/keras.git
 cd keras
python setup.py install 

با تشکر :)

محمد چناریان نخعی