در این مقاله از مجله همرویش، قصد داریم این دو کتابخانه را از دو منظر با هم مقایسه کنیم:
- ویژگیهای تازه در جدیدترین نسخههای منتشر شده چیست؟
- از کدام یک استفاده کنیم و چرا؟ (بر اساس 2 سال انجام پروژههای یادگیری ماشین)
Tensorflow 2.x
تغییرات متعددی بین Tensorflow 1 و Tensorflow 2.x وجود دارد که در اینجا سعی میکنیم به مهمترین آنها اشاره کنیم.
نسخه اول:
اولین مورد، انتشار Tensorflow.js است. با تسلط روزافزون برنامههای کاربردی وب یا وب اپلیکیشنها (web applications) بر دنیای دیجیتال، نیاز به استقرار مدلها در مرورگرها بسیار افزایش یافته است. با Tensorflow.js میتوانید مدلهای پایتون موجود را در مرورگر با استفاده از Node اجرا کنید، مدلهای موجود را مجدداً آموزش دهید، و مدلهای خود را کاملا با استفاده از جاوا اسکریپت بسازید و سپس آموزش دهید (یعنی نیازی به پایتون ندارید).
نسخه دوم:
نسخه دیگر Tensorflow 2.x عبارت است از Tensorflow Lite؛ یک “کتابخانه سبک برای استقرار مدلها بر روی تلفن همراه و دستگاههای تعبیه شده (embedded)”. این امر منطقی به نظر میآید زیرا غالب برنامههای کاربردی را اپلیکیشنهای موبایل و وب اپلیکیشنها تشکیل میدهند.
با Tensorflow Lite به سادگی میتوانید مدلهای موجود خود را به یک «بافر مسطح فشرده» (compressed flat buffer) تبدیل کنید و آن بافر را بر روی موبایل یا هر دستگاه تعبیهشده دیگری بارگذاری کنید. فرآیند اصلی بهینه سازی، تبدیل اعداد اعشاری 32 بیتی به 8 بیتی است که برای دستگاههای تعبیه شده مناسب تر است (مصرف حافظه کمتر).
آخرین نسخه:
آخرین نسخه اصلی منتشر شده، Tensorflow Extended (TFX) نام دارد. این نسخه، یک پلتفرم سرتاسری برای استقرار خطوط لوله (pipelines) تولید یادگیری ماشین است و باید اعتراف کرد که در سه حوزه مهم در یادگیری ماشین (وب اپلیکیشنها، اپلیکیشنهای تلفن همراه و مدیریت تولید) به خوبی کار کردهاند.
خطوط لوله تولید یادگیری ماشین هنوز به تحقیق و توسعه زیادی نیاز دارند. TFX به حل چالشهای سنتی تولید نرمافزار مانند مقیاسپذیری (scalability)، قابلیت نگهداری (maintainability) و پیمانهای بودن (modularity) کمک میکند. این نسخه همچنین در حل چالشهای خاص یادگیری ماشین مانند یادگیری آنلاین پیوسته، اعتبارسنجی دادهها، مدیریت دادهها و موارد دیگر نیز کاربرد دارد.
پیش از این آموزش آموزش تنسورفلو (پیاده سازی شبکه های عصبی با TensorFlow) در همرویش منتشر شد. فیلم معرفی این آموزش را در زیر میتوانید مشاهده کنید:
دریافت کامل بسته آموزش پیاده سازی شبکههای عصبی با تنسورفلو
Pytorch 1.8
مشابه Tensorflow Lite، Pytorch نیز نسخه موبایلی خود (Pytorch Mobile) را بهبود بخشیده است. یک فریمورک، مدلها را برای هر دو پلتفرم اندروید و iOS کوانتیزه، ردیابی، بهینه سازی و ذخیره میکند. همچنین یک نمونه اولیه از Pytorch Lite Interpreter منتشر شده است که مدت زمان اجرای باینری را در دستگاههای تلفن همراه کاهش میدهد.
علاوه بر آن، شرکت فیس بوک، پشتیبانی بیشتری را برای آموزش توزیع شده با مدیریت متقن خطا و موازی سازی خطوط لوله اضافه کرده است. در نهایت، Pytorch Profiler را معرفی کرده است که ابزاری برای اشکال زدایی و عیب یابی مدلهای یادگیری عمیق در مقیاس بزرگ به شمار میآید.
اگرچه Pytorch lightning بخشی از Pytorch 1.8 نیست، اما شایان ذکر است که Pytorch lightning برای سادهتر کردن کدگذاری شبکههای عصبی منتشر شده است. شما میتوانید آن را به عنوان یک Keras از Pytorch در نظر بگیرید که کشش زیادی پیدا کرده است.
دلیلی که فکر کردم ارزش ذکر کردن دارد این است که Keras همیشه Tensorflow را به طور قابل توجهی بهبود داده است زیرا پیاده سازی مدلها را بسیار ساده تر و کوتاه تر میکند. Pytorch lightning همین کار را با Pytorch انجام میدهد.
هم رویش منتشر کرده است:
آموزش شبکه عصبی مصنوعی -- از صفر به زبان ساده
از کدام یک استفاده کنیم؟ تنسورفلو یا پایتورچ ؟
سوال بعدی که همیشه در ذهن همه وجود دارد، این است که از کدام یک استفاده کنیم. من هر بار که یک پروژه یادگیری ماشین را در طی 2 سال گذشته شروع کردهام، با این سوال مواجه شدهام. در نتیجه قصد دارم بازتابی سریع از تجربیاتم به همراه نکاتی در مورد نحوه انتخاب بین آنها ارائه دهم.
هر دو کتابخانه، اساسا خوب هستند و از نظر عملکرد و ویژگیهایی که ارائه میدهند، بسیار به هم نزدیکاند. به طور کلی، شما باید متوجه باشید که در سبک کدنویسی بین این دو کتابخانه، تفاوت وجود دارد و این همان چیزی است که در واقع باعث ایجاد تفاوت در هنگام کار بر روی یک پروژه یادگیری ماشین میشود.
Pytorch به دلیل داشتن سبک OOP (برنامه نویسی شی گرا) کاملاً مشهور است. به عنوان مثال، هنگامی که یک مدل سفارشی یا یک مجموعه داده سفارشی ایجاد میکنید، به احتمال زیاد یک کلاس جدید ایجاد میکنید که کتابخانههای پیش فرض PyTorch را به ارث میبرد و سپس، خود را با متدهای شما تطبیق میدهد. من شخصا از طرفداران OOP نیستم. اگرچه یک نوع ساختار برای کد فراهم میکند، اما از نظر تعداد خطوط کد، پیاده سازیها را بسیار طولانی تر میکند.
از طرف دیگر، هنگامی که از Tensorflow استفاده میکنید، به احتمال زیاد از Keras استفاده خواهید کرد. در هنگام شرکت در مسابقات Kaggle (طبقهبندی تصاویر به صورت تحت نظارت، تشخیص اشیا، تقسیمبندی تصویر، پردازش زبان طبیعی و …) تقریبا همیشه به این نتیجه رسیدهام که پیادهسازی Keras کوتاهتر از Pytorch است. این موضوع برای افراد مبتدی یا در سطح متوسط بسیار خوب است، زیرا نیازی به صرف زمان زیاد برای خواندن و شکستن خطوط کد ندارد.
هم رویش منتشر کرده است:
آموزش YOLO - تشخیص اشیا با پایتون در OpenCV
در برخی از سناریوها، شما به دنبال یک مدل کاملا خاص در یک زیر زمینه خاص یادگیری ماشین هستید. یک نکته بسیار مفید از تجربه من این است که در چنین سناریویی، به احتمال زیاد تنها در یکی از کتابخانهها، پشتیبانی بیشتری برای آن مدل خواهید یافت؛ صرفا به این دلیل که مدل، ابتدا در آن کتابخانه پیادهسازی شده و آموزشها روی همان پیادهسازی اول انباشته شدهاند. در این سناریو، فقط با همان کتابخانه که پشتیبانی بیشتری برای مدل دارد کار کنید؛ زیرا زندگی را برای شما آسان تر میکند!
به عنوان مثال، زمانی که من در حال انجام یک پروژه در مسابقه تشخیص اشیا بودم و میخواستم DETR (مبدل داده کارآمد فیسبوک) را پیادهسازی کنم، بیشتر منابعی که پیدا کردم در Pytorch نوشته شده بودند (که بدیهی است!) و بنابراین استفاده از Pytorch در این مورد بسیار سادهتر بود.
همچنین، یک بازتاب نهایی از تجربیاتم این است که فهمیدهام پیادهسازیهای Pytorch طولانیتر هستند، زیرا به نظر میرسد جزئیات سطح پایین زیادی را پوشش میدهند. این هم یک مزیت است و هم یک عیب. یک مزیت به حساب میآید زیرا وقتی مبتدی هستید، بهتر است آن جزئیات سطح پایین را یاد بگیرید و سپس به یک API سطح بالا مانند Keras بروید. با این حال، یک عیب هم به شمار میآید؛ زیرا خواهید دید که در بسیاری از جزئیات و کدهای نسبتا طولانی گم شدهاید. بنابراین، اگر روی یک پروژه با ضرب الاجل فشرده کار میکنید، اساسا بهتر است Keras را به Pytorch ترجیح دهید.
سخن پایانی
امیدوارم این مقاله را دوست داشته باشید و نکات من برای شما مفید بوده باشد. میدانم که ممکن است در مورد این کتابخانهها، اختلاف نظرهایی وجود داشته باشد، اما این اختلافها فقط به این دلیل است که افراد مختلف، تجربیات متفاوتی با آن دو کتابخانه داشتهاند. اما، من همیشه افراد مبتدی یا متوسطی را پیدا کردهام که تجربیات کاملاً مشابهی در کار با این دو کتابخانه داشتهاند.
از آنجایی که هر دو از نظر عملکرد کاملاً مشابه هستند، به نظر من کتابخانه انتخابی، احتمالا فقط یک ترجیح ساده بین آن دو است.
** پیش از این آموزش شبکه عصبی با پایتون در همرویش منتشر شد. برای دیدن فیلم معرفی این آموزش بر روی این لینک (+) و یا پخش کننده پایین کلیک کنید:
برای دریافت بسته کامل این آموزش بر روی لینک زیر کلیک کنید:
آموزش ساخت شبکه عصبی با پایتون (و دیگر زبانها) از صفر
کلید واژگان
تنسورفلو یا پایتورچ | PyTorch یا Tensorflow | مقایسه تنسورفلو با پایتورچ | مقایسه پایتورچ با تنسورفلو | فرق تنسورفلو با پایتورچ | تفاوت تنسورفلو با پایتورچ | مقایسه PyTorch با Tensorflow | پای تورچ یا تنسورفلو | ویژگی تنسورفلو و پایتورچ
منبع
دوره های آموزشی مرتبط
- آموزش یادگیری ماشین از صفر --- یادگیری سریع و آسان ۶۸,۰۰۰ تومان
- آموزش تشخیص اشیای اختصاصی با YOLO ۷۵,۰۰۰ تومان