دانشجویار
دانشجویار
خواندن ۷ دقیقه·۴ سال پیش

مقایسه PyTorch و Tesnsorflow برای یادگیری ماشین با پایتون

در این مقاله framework های معروف یادگیری عمیق را مقایسه می کنیم: Tensorflow و Pytorch

قصد داریم که به جزئیات مربوط به مقایسه TensorFlow 2.0 ،TensorFlow 1.xو PyTorch با یکدیگر بپردازیم و چگونگی قرار گرفتن کراس را در آن ها بررسی کنیم.

اگر تا به حال با اصطلاحات Deep learning یا یادگیری عمیق و machine learningیا یادگیری ماشین برخورد کرده باشید، به احتمال زیاد در مورد TensorFlow و PyTorch هم چیزهایی شنیده اید.


یادگیری عمیق چیست؟

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

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

درباره PyTorch و TensorFlow

این دو جزو محبوب ترین فریم ورک های امروزی هستند که برای ساخت و بهینه سازی شبکه عصبی استفاده می شوند. در حالی که Tensorflow توسط گوگل پشتیبانی می شود ، PyTorch نیز توسط Facebook پشتیبانی می شود. هر دو نیز به طور فعال و مداوم، توسعه یافته و نگهداری می شوند.

در این مقاله آموزشی تمام شک و تردید خود را در مورد ویژگی های 2 مورد از محبوب ترین فریمورک های شبکه عصبی برطرف خواهید کرد و می توانید بین انتخاب این دو فریم ورک به راحتی تصمیم گیری کنید.

درباره TensorFlow TensorFlow باید گفت که دارای دو نسخه قدیمی و جدید TF1.x و 2.0TF می باشد.

این Tensorflow توسط گوگل ساخته شده و اولین بار در نوامبر 2015 راه اندازی شد. اخیرا هم یک نسخه به روز شده یا همان چیزی که ما آن را با 2.0TensorFlow می شناسیم ، در سپتامبر 2019 راه اندازی شد .همین باعث شد که نسخه قدیمی تر به عنوان TF1.x و نسخه جدیدتر به عنوان 2.0TF در نظر گرفته شود.

فریمورک Tensorflowچیست؟

فریمورک TensorFlowیکی از فریمورک های اولیه ای بود که برای شبکه های عصبی سازگار ساخته شد .این فریم ورک توسط گوگل پشتیبانی می شود و همین موضوع یکی از دلایل اصلی می باشد که از کاربران زیادی برخوردار است. گوگل به ادغام هوش مصنوعی در هر یک از محصولات پیشنهادی خود می پردازد.

در بیشتر موارد اولین چارچوبی که هنگام شروع یک دوره یادگیری عمیق یا دوره هوش مصنوعی درباره آن خواهید شنید ،Tensorflow می باشد.

سوالی که پیش می آید این است که چه چیزی در نسخه به روز شده TensorFlow تغییر کرده است؟

مهمترین تغییر در 2.0TF نسبت به TF1.x پشتیبانی از نمودارهای محاسبات داینامیک یا پویا است.

نمودار محاسبه چیست؟

نمودار محاسباتی مجموعه عملکردها و تبدیلات ریاضی است که داده های ورودی ما تحت تاثیر آن قرار می گیرند تا به خروجی نهایی برسند.

تفاوت نمودار محاسبه استاتیک و داینامیک

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

نمودارهای محاسبه پویا اغلب توسط توسعه دهندگان و مهندسان ترجیح داده می شوند.

مزایای نسخه جدید tensorflow و معایب نسخه قدیم tensorflow

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

همچنین در هنگام آزمایش مدل ها امکان انعطاف پذیری زیادی را فراهم نمی کند.

به همین دلیل است که بروزرسانی نمودارهای محاسبات داینامیک پیشرفت عمده ای در 2.0TF بود.

داینامیک بودن، سهولت استفاده را برای توسعه دهندگان افزایش می دهد و آزمایش مدل ها را ساده تر می کند.

هم چنین برای جدا کردن آن از پایتون ، دیگر نیازی به شروع جلسات جداگانه در TensorFlow نبود.

ایجاد جلسات در TF1.x اجباری بود اما 2.0TF اصلاً از جلسات استفاده نمی کند و فقط از توابع استفاده می کند.

ادغام کراس

هنگامی که TensorFlow 1.x منتشر شد ، Keras برای ساختن کد TF در میان توسعه دهندگان محبوب شد. زیرا Keras با ارائه یک API ، روند ساخت مدل را ساده کرد. علاوه بر این ، از سایر فریمورک های یادگیری عمیق مانند oThean و CNTK نیز پشتیبانی می کند.

همچنین این امکان را برای شما فراهم می کند تا کد یادگیری عمیق خود را در Keras بنویسید ، در حالی که به توسعه دهنده اجازه می دهد هر کدام از فریم ورک های backend را که بخواهد فقط با یک خط کد انتخاب کند.

اکنون ، keras ماژولی است که می توانید در داخل 2.0TF وارد کنید. با استفاده از این ادغام ، می توانید مدل های یادگیری عمیق را در 2.0TF با استفاده از روش اصلی keras ، یعنی مدل های متوالی و API های کاربردی ایجاد کنید.

بعلاوه ، با 2.0TF می توانید از Subclassing Model نیز استفاده کنید که بیشتر شبیه نحوه ساخت مدل توسط PyTorch است .

در2.0Tensorflow ، به راحتی می توانید بین اجرای اشتیاق که برای توسعه بهتر است و حالت تنبل که برای استقرار بهتر است استفاده کنید.

اجرای مشتاقانه از برنامه نویسی ضروری استفاده می کند که اساساً همان مفهوم نمودارهای محاسبه داینامیک است. کد دقیقاً مانند نحوه کار معمول پایتون اجرا می شود.

اجرای تنبل از برنامه نویسی نمادین استفاده می کند که همان نمودارهای محاسبه استاتیک است .توابع بصورت انتزاعی تعریف می شوند و هیچ محاسبه واقعی صورت نمی گیرد تا زمانی که عملکرد به طور صریح کامپایل و اجرا شود.

بنابراین 2.0TF از اجرای مشتاقانه و تنبل پشتیبانی می کند.

واضح است که 2.0TensorFlow مشکلاتی را که با TensorFlow1.x روبرو بودیم برطرف کرد .

درباره PyTorch

فریمورک PyTorchتوسط فیس بوک ساخته شده و در اکتبر 2016 راه اندازی شده است. در زمان راه اندازی

، تنها چارچوب اصلی و محبوبی که برای یادگیری ماشین وجود داشت، نسخه قدیمی یعنی TensorFlow1.x بود که فقط نمودارهای محاسبه استاتیک را پشتیبانی می کرد.

این فریمورک به 2 دلیل عمده به طور گسترده ای پذیرفته شد:

  • برای ساخت NN ها از نمودارهای محاسبه داینامیک استفاده شده است.
  • این برنامه با پایتون کاملاً هماهنگ بود و این امر باعث شد توسعه دهندگان پایتون بتوانند به راحتی به این چارچوب روی بیاورند.

این تفاوت اساسی PyTorch با نسخه TensorFlow موجود در آن زمان بود.


تفاوت Tesnsorflow و PyTorch

در زیر می توانید خلاصه ای از تفاوت نسخه های اولیه TensorFlow و PyTorch را مشاهده کنید.


تفاوت اصلی که pytorch با نسخه جدید TensorFlow کرده است این است که به tf احتیاج نداریم و 2.0TF از نمودارهای داینامیک نیز پشتیبانی می کند.

تغییر عمده دیگر در 2.0TF این است که اجازه می دهد تا "طبقه بندی فرعی مدل" ، که یک روش معمول برای ساخت مدل های شبکه عصبی در PyTorch است، انجام گیرد. این روش به شما امکان می دهد معماری های پیچیده مدل را بسازید ، که برای آزمایش بسیار مناسب است.

بنابراین ، 2.0TF برخی از روش های اصلی توسعه را که قبًلاً در PyTorch انجام شده ، در پیش گرفته است. در واقع اگر در گذشته pytorch معایب TF1.x را پوشش می داد، اکنون 2.0TF کاملا آن معایب را رفع کرده است .TensorFlow کنونی تمام امکانات pyTorch را پوشش داده است.

در زیر دو قطعه کد از 2.0TF و PyTorch آورده شده است که چگونگی شباهت آن دو را در طبقه بندی مدل نشان می دهد.

# Representative Code in PyTorch
()
import torch.nn as nn import torch.nn.functional as F
class Model(nn.Module): def __init__(self):
super(Model, self).__init__ self.conv1 = nn.Conv2d()
self.conv2 = nn.Conv2d()
(x)) in TensorFlow2.0
, Model
()
))
(x))
def forward(self, x):
x = F.relu(self.conv1(x)) return F.relu(self.conv2 # Equivalent Representative Code import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers
class TFModel(Model): def __init__(self):
super(TFModel, self).__init__ self.conv1 = layers.Conv2D() self.conv1 = layers.Conv2D()
def call(self, x):
x = layers.ReLU(self.conv1(x return layers.ReLU(self.conv2

مزایای Tensorflow

1. کاربر پسند و اگر با پایتون آشنا باشید یادگیری آن آسان است.

2. در Tensorboard برای نظارت و تجسم است. اگر می خواهید مدل های یادگیری عمیق خود را در عمل مشاهده کنید ، این یک ابزار عالی است.

3. پشتیبانی جامعه مهندسین خبره گوگل و سایر شرکت ها تقریباً روزانه TensorFlow را بهبود می بخشند.

4. برای اجرای مدل های TensorFlow در دستگاه های تلفن همراه می توانید از TensorFlow Lite استفاده کنید.

5. در Tensorflow.js به شما امکان می دهد با استفاده از JavaScript مدل های یادگیری عمیق را در زمان واقعی در مرورگر اجرا کنید.

معایب Tesnsorflow

1. چارچوب TensorFlow در مقایسه با چارچوب هایی مانند MxNet و CNTK کمی کند است.

2. اشکال زدایی در آن می تواند چالش برانگیز باشد.

3. پشتیبانی از OpenCL نمی کند.

مزایای PyTorch

1. طراحی و ساختار کاربر پسند که ساخت مدل های یادگیری عمیق را شفاف می کند.

2. دارای ابزارهای رفع اشکال مفیدی مانند اشکال زدایی PyCharm است.

3. شامل بسیاری از مدل های از قبل آموزش دیده و پشتیبانی از آموزش توزیع شده است.

معایب PyTorch

1. مانند TensorFlow رابطی برای نظارت و تجسم ندارد.

2. فریمورک PyTorch یک فریمورک جدید برای یادگیری عمیق است و در حال حاضر از پشتیبانی جامعه کمتری برخوردار است.

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

پایتونPyTorchیادگیری ماشین
شاید از این پست‌ها خوشتان بیاید