اگر شما هم کمی در زمینه هوش مصنوعی و کمی تخصصیتر یعنی در زمینه یادگیری عمیق بخواهید کار کنید مطمئنا باید برخی از فریمورکها را بشناسید که بتوانید کار موردنظر خود را انجام دهید و در نهایت به جواب مطلوبی که مدنظرتان است برسید.
در این مقاله میخواهیم برخی از این فریمورکها را معرفی کنیم و در نهایت با یکی از آنها شروع به کار کنیم.
فریمورک TensorFlow چیست؟
تنسورفلو امروزه بیشترین محبوبیت را بین فریمورک های یادگیری عمیق دارد و در بیشتر پروژهها میتوان گفت که تقریبا میتوان تاثیر آن را مشاهده کرد. و این فریمورک توسط گوگل ساخته شده است که برای بسیاری از محصولاتی که میشناسید اعم از یوتوب و جیمیل و گوگل مپ و گوگل ترنسلیت و… به کار رفته است.
به عبارت دیگر خیلی از شرکت های بزرگ تکنولوژی از این فریمورک استفاده میکنند مثل اوبر و ایر بی ان بی و دیپ مایند و دراپ باکس و…
در هر حال میتوان گفت که یکی از بهترین زبانهای برنامهنویسی، با استفاده از این فریمورک، زبان پایتون است اما میتوان با زبان های دیگری هم مثل C++ ،Java ،GO C# ،Julia، … کار کرد.
با توجه به جامعه گسترده برنامه نویسان و کمپانی های تکنولوژیی که در حال فعالیت در زمینه فریمورک هستند، داکیومنت و راهنمایی های بسیار خوبی در این زمینه وجود دارد که میتواند بسیار کمک کننده باشد.
انواع سرویس تنسورفلو (Tensor flow)
سرویس تنسوربورد: از این سرویس جهت تجسم داده ها و به تصویر کشیدن مراحل آموزش شبکه استفاده میشود.
سرویس tensor flow serving : از این نوع سرویس جهت سرو کردن مدل ماشین لرنینگ استفاده میشود، یعنی اینکه مدل آموزش داده شده را میگیرد و در نهایت آن را برای درخواست های پیشبینی و تشخیص آماده میکند.
تنسورفلو لایت ( Tensor flow lite) : نسخه سبک، برای گوشی های موبایل و دستگاه های امبدد است و همانطوری که گفته شد برای دستگاههای امبدد کاربرد دارد.
اما به این راحتی که فکر میکنیم نیست واقعا، به طور مثال برای کد زدن باید بخشی از مجیک نامبر را بدانیم مثلا شماره لایه ها و ابعاد داده های ورودی که تبدیل و کار کردن با اینها، همگی مستلزم برنامهنویسی است و واقعا برای خودش دنیایی است.
بصورت پیشفرض تنسورفلو به توسعه دهنده اجازه میدهد که static computation graph را درست کند به عبارت دیگر باید اول همه چیز را تعریف کنیم و سپس برنامه را اجرا کنیم.
اگه هر گونه تغیری را بخواهیم انجام دهیم در ساختار شبکه عصبی مجبور هستیم که از اول بازنویسی را انجام دهیم که سیستم بهره وری بیشتری داشته باشد اما خیلی از شبکه های جدیدتر قادر هستند که به صورت داینامیک عوض شوند (dynamic computation fraph) به طور مثال pytorch.
نتیجهای که میتوانیم بگیریم این است که فریمورک تنسورفلو کار را برای انجام عملیات دیباگ سخت میکند.
نکته جالب اینجا است که دقیقا به خاطر موضوعی که اشاره کردیم گوگل، eager را معرفی کرد که یه ماژول گراف محاسبات داینامیک است که برای تنسورفلو ساخته شده است. اما هنوز واقعا بازده چندان خوبی ندارد در نتیجه به عنوان یک راهنمایی اگر در پروژههایتان نیاز دارید که شبکهها را به صورت داینامیک تغیر دهید توصیه میکنیم از PYTORCH استفاده کنید.
PyTorch چیست؟
همانطور که گفتیم دقیقا برعکس تنسورفلو (define-by-run mode)، شبیه برنامه نویسی است، و میتوانیم از ابزارهای دیباگینگ رایج مثل pdb ،ipdb یا PyCharm debugger استفاده کنیم.
ویژگی های استفاده از PyTorch
ماژول های از پیش تمرین داده شده زیادی به همراه بخش های ماژولار خیلی ساده در آن وجود دارد که کاربر به راحتی میتواند از آنها استفاده کند.
دقیقا مثل تنسورفلو از distributed training پشتیبانی میکند. یعنی به راحتی میتوانید از مدل هایی که قبلا شخص دیگری استفاده کرده است اصطلاحا Train شده است. استفاده کنید.
این فریمورک فاقد رابط کاربری برای مانیتورینگ و تجسم است، البته این قابلیت را دارد که میتوان بصورت خارجی به تنسوربورد متصل شود.
نتیجه گیری بین PyTorch و TensorFlow :
اگر کاری که انجام میدهید یک پروژه کوچک تلقی میشود استفاده از TensorFlow کاری نادرست است ولی اگر پروژه شما دارای پیچیدگی بسیار زیادی است و جز پروژههای بزرگ تلقی میشود حتما از TensorFlow استفاده کنید.
فریمورک Keras چیست؟
ساده ترین کتابخانه در این حوزه را میتوان ار پایتون کراس (Keras) نام برد. کراس از رنج گسترده ایی از شبکه های عصبی پشتیبانی میکند و ساختن نمونه های اولیه را بسیار ساده میکند. و از همه مهمتر تحلیل کد آن هم بسیار ساده است. البته به عنوان یکی از نقاط قوت آن میتوان به این نکته اشاره کرد که این کتابخانه از چند GPU پشتیبانی میکند.
فریمورک MXNET چیست؟
این فریمورک یادگیری عمیق در واقع از چندین زبان پشتیانی میکند به طور مثال: پایتون، جولیا، C++، و R و JS.
این کتاباخانه به مقیاس پذیری مشهور است و این خاصیت آن باعث شده، بهترین گزینه برای تشیخص تصویر برداری و دست خط و گفتار و حدسزدن و پردازش زبان طبیعی باشد. (imaging handwriting/speech recognition, forecasting, NLP)
اما بزرگترین ایرادی که میتوان از آن گرفت این است که، خیلی مطالبی در سطح وب در این مورد نیست و اگر به ارور و مسئله ایی بخورید شاید به راحتی راهحلی برا موضوع پیدا نکنید.
فریمورک MICROSOFT CNTK چیست؟
این فریمورک برای ارتباط با دیتا های بزرگ ساخته شده است و از پایتون و C++ و C# و Java . از Apache Spark پشتیبانی میکند و همینطور در برخی از نرمافزارها و سختافزارها مثل اسکایپ و Xbox و کورتانا و.. استفاده شده است. این فریمورک قادر به حل مسائل دیپلرنینگ، شبکه های عصبی، کانولوشنال و ریکارنت (CNN , RNN) از جمله تشخیص تصاویر و دست خط و گفتار است.
فریمورک CHAINER چیست؟
این فریمورک توسط یک استارت آپ ژاپنی درست شده است، که شبیه پای تورچ عمل میکند البته با این تفاوت که API محلی دارد اما نحوه دیباگ آن کمی سخت است. استفاده اصلی از آن برای تشخیص گفتار و ترجمه ماشینی و آنالیز احساسات است.
فریمورک DL4J چیست؟
اگر زبان اصلی برنامه نویسی شما جاوا است. حتما باید یک نگاهی به این فریمورک کنید. در اصل برای جاوا و اسکالا ساخته شده و پشتیبانی خیلی خوبی برای انواع شبکه های عصبی از جمله CNN، RNN ،RNTN، یا LTSM ارائه میکند.
قدرتمند، انعطاف پذیر و کارآمد.
حجم زیادی از دیتا را میتواند بدون قربانی کردن سرعت، پردازش کند.
داکیومنتهای خیلی خوبی دارند که برای شروع بسیار مناسب هستند. و …
نکته: زبان جاوا زیاد بین پروژه های ماشین لرنینگ محبوب نیست به دلیل اینکه قیمت توسعه پروژه را افزایش میدهد. شاید مهمترین علتی که میتواند باعث محبوبیت آن شود این است که، این فریمورک برای دولوپ کردن نرمافزارهای اندرویدی به کار میرود.
فریمورک ONNX چیست؟
این فریمورک مخفف Open Neural Network Exchange است که محصول یک همکاری بین مایکروسافت و فیسبوک است. دلیل ساختن اینفریمورک هم این است که، بین لوازم جامعه هوش مصنوعی نیاز به اشتراکگذاری و همکاری این ماژولها وجود دارد، از انجایی که خیلی از مواقع در یک فریمورک یا اکوسیستم دچار مشکل میشوند. تصمیم گرفتند که فریمورکی را درست کنند که بتوانند ابزارهای موردنیاز خود را با یک دیگر به اشتراک گذارند.
onnx، بیشتر این ابزار را به یکدیگر متصل میکند که بتوانند با یکدیگر به وسیله ی اشتراک گذاری ماژول ها کار کنند. عملکرد به اینگونه است که میتوانید یک ماژول را با یکی از ابزارها train کنید و بخش deploy کردن آن را با یک ابزار دیگری انجام دهید.
خلاصه:
Tensorflow: برای انجام پروژه هایی که میخواهید روی گوگل کلود توسعه دهید.
PyTorch: برای انجام تحقیقات در زمینه هوش مصنوعی گزینه مناسبی است.
MXNET : برای توسعه پروژه روی AWS بیشتر کاربرد دارد.
CNTK : برای توسعه پروژه روی AZURE بیشتر کاربرد دارد.
DL4J : برای افرادی که توسعه دهنده جاوا هستند پیشنهاد میشود.
ONNX : از ONNX میتوانید برای استفاده از ابزار های فریمورک های دیگv اکوسیستم استفاده کنید.
امیدوارم که این آموزش هم برای شما مفید واقع شده باشد.
منابع
https://www.netguru.com/blog/deep-learning-frameworks-comparison
https://towardsdatascience.com/deep-learning-framework-power-scores-2018-23607ddf297a
https://365datascience.com/deep-learning-frameworks-2019/
https://en.wikipedia.org/wiki/Open_Neural_Network_Exchange
https://www.springboard.com/blog/deep-learning-frameworks/