هوش مصنوعی

پای‌تورچ یا تنسورفلو: یک نگاه عملی

نویسنده: Hadi ZareZadeh۲۸ بهمن ۱۴۰۴۲۵۴۱ بازدید
پای‌تورچ یا تنسورفلو: یک نگاه عملی

کم بحثی به‌اندازه پای‌تورچ در برابر تنسورفلو حرارت تولید می‌کند و روشنایی کم. با هر دو کار واقعی تحویل داده‌ام و نظر صادقانه‌ام این است که فریم‌ورک بسیار کمتر از آنچه وانمود می‌شود اهمیت دارد. با این حال، «مهم نیست» یک طفره است، پس بگذارید بگویم واقعاً چطور تصمیم می‌گیرم.

نسخه کوتاه

برای یادگیری، پژوهش و بیشتر کار محصولی در ۱۴۰۵، به‌طور پیش‌فرض سراغ پای‌تورچ می‌روم. برای برخی سناریوهای تولید و موبایل/لبه، یا وقتی یک تیم همین حالا در آن دنیا زندگی می‌کند، تنسورفلو (و اکوسیستمش) جای خود را دارد. اگر کاربلد باشید، هیچ‌کدام پروژه‌تان را غرق نمی‌کند.

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

ارگونومی و شیب یادگیری

پای‌تورچ مثل نوشتن پایتون معمولی حس می‌شود. اجرای تعریف‌حین‌اجرای آن یعنی مدلتان خط‌به‌خط اجرا می‌شود، پس می‌توانید هرجا یک breakpoint یا یک print بگذارید و تنسورها را در حین جریان بازرسی کنید.

import torch
import torch.nn as nn

model = nn.Sequential(
    nn.Linear(20, 64),
    nn.ReLU(),
    nn.Linear(64, 1),
)

x = torch.randn(8, 20)
print(model(x).shape)   # به سادگی هر کد پایتون دیباگ کنید

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

import tensorflow as tf

model = tf.keras.Sequential([
    tf.keras.layers.Dense(64, activation="relu"),
    tf.keras.layers.Dense(1),
])
model.compile(optimizer="adam", loss="mse")

جایی که هرکدام جلو می‌زند

بُعدپای‌تورچتنسورفلو
پژوهش و آخرین مقالاتغالب؛ بیشتر کدهای جدید پای‌تورچ‌انددر پژوهش‌های جدید کمتر رایج
حس دیباگپایتونیک، خط‌به‌خطبهبودیافته، اما انتزاعی‌تر
استقرار موبایل/لبهدر حال بهبودبالغ (اکوسیستم TF Lite)
سرویس‌دهی تولیدقوی، با ابزار در حال رشدپشته سرویس‌دهی آبدیده
API سطح‌بالای مبتدیخوبKeras بسیار قابل‌دسترس است

مسئله استقرار

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

زاویه استخدام و اکوسیستم

اگر برای استخدام‌شدن یاد می‌گیرید، ببینید شرکت‌های هدفتان واقعاً از چه استفاده می‌کنند، اما این را بدانید: تسلط بر پای‌تورچ راحت‌تر به کار پیشرو منتقل می‌شود چون جامعه پژوهشی پیش‌فرضش آن است. یکی را عمیق یاد بگیرید؛ دومی یک تمرین ترجمه است، نه یک زبان جدید.

اشتباهات رایج

  • برخورد با انتخاب به‌عنوان امری دائمی. مفاهیم — تنسور، autograd، بهینه‌سازها، توابع زیان — یکسان‌اند. تعویض ارزان است.
  • انتخاب بر اساس بنچمارک‌هایی که هرگز به آن‌ها نمی‌رسید. جنگ‌های ریزبنچمارک برای اکثریت قاطع پروژه‌ها بی‌ربط‌اند.
  • نادیده گرفتن هدف استقرار تا آخر. قبل از اینکه عاشق یک تنظیمات آموزش شوید، تصمیم بگیرید مدل کجا اجرا می‌شود.

بهترین شیوه‌ها

  • برای یادگیری و پژوهش پیش‌فرض را پای‌تورچ بگذارید؛ وقتی هدف استقرار یا تیمتان آشکارا تنسورفلو را ترجیح می‌دهد آن را انتخاب کنید.
  • کد آموزش را از کد سرویس‌دهی جدا کنید تا انتخاب فریم‌ورک همه‌جا نشت نکند.
  • مفاهیم بنیادی را یاد بگیرید، نه ریزه‌کاری API را. APIها تغییر می‌کنند؛ گرادیان‌ها نه.

جمع‌بندی

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