با یه تیر دو نشان بزن🎯، هدیه 6 میلیونی(متخصص لینوکس) به همراه ۲0٪ تخفیف روی همه دوره‌های متخصص😍
۰ ثانیه
۰ دقیقه
۰ ساعت
۰ دیدگاه نظر سحر پاشائی
PyTorch چیست؟ (آموزش کامل و مثال‌های عملی)
PyTorch چیست؟ (آموزش کامل و مثال‌های عملی)

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

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

PyTorch چیست؟

PyTorch یه کتابخونه متن‌باز برای یادگیری عمیقه که در سال ۲۰۱۶ توسط فیسبوک توسعه داده شده. این کتابخونه بهت کمک می‌کنه مدل‌های یادگیری عمیق رو به راحتی و با استفاده از پایتون بنویسی و آموزش بدی. PyTorch به خاطر سادگی و انعطاف‌پذیریش خیلی محبوب شده و کلی از پژوهشگرها و برنامه‌نویس‌ها ازش استفاده می‌کنن. با PyTorch می‌تونی مدل‌های پیچیده رو به راحتی بسازی و اونا رو روی CPU یا GPU اجرا کنی تا کارات سریع‌تر پیش بره.

چرا PyTorch؟

حالا ممکنه بپرسی چرا PyTorch اینقدر محبوب شد. جواب ساده‌س: سادگی و انعطاف‌پذیری. PyTorch به کاربرا اجازه می‌ده مدل‌هاشون رو با پایتون (یکی از محبوب‌ترین زبان‌های برنامه‌نویسی) به راحتی بنویسن و تغییر بدن. این کتابخونه همچنین از قابلیت‌های پیشرفته‌ای مثل محاسبات گراف‌های پویا پشتیبانی می‌کنه که به کاربرا اجازه می‌ده ساختار مدل‌هاشون رو به طور داینامیک تغییر بدن.

ویژگی‌های اصلی PyTorch

PyTorch ویژگی‌های زیادی داره که اونو از بقیه کتابخونه‌ها متمایز می‌کنه:

  • محاسبات گراف‌های پویا: PyTorch بهت اجازه می‌ده که گراف محاسباتی خودتو همون موقع که اجرا می‌کنی، تعریف کنی. یعنی می‌تونی مدل‌هاتو در حین اجرا تغییر بدی و این خیلی برای آزمایش و تحقیق عالیه.
  • پشتیبانی از CUDA: این کتابخانه به راحتی از کارت‌های گرافیک (GPU) استفاده می‌کنه تا محاسبات سنگین رو سریع‌تر انجام بده. اگه کارت گرافیک داشته باشی، می‌تونی با سرعت نور مدل‌هاتو آموزش بدی.
  • سادگی و خوانایی: کدهای نوشته شده با PyTorch به خاطر استفاده از پایتون، خیلی خوانا و قابل فهم هستن. این یعنی حتی اگه تازه‌کاری، می‌تونی راحت یاد بگیری و مدل‌هاتو بسازی.
  • کتابخانه‌های غنی: PyTorch یه سری کتابخونه‌های اضافه داره که کارتو خیلی راحت‌تر می‌کنه. مثلا کتابخونه‌های torchvision برای کار با تصاویر، torchtext برای پردازش متن و torchaudio برای کار با صدا.
  • جامعه‌ی فعال و پشتیبانی قوی: PyTorch جامعه کاربری خیلی فعالی داره که همیشه توی انجمن‌ها و شبکه‌های اجتماعی درباره‌ش بحث می‌کنن. این یعنی هر وقت مشکلی داشتی، احتمال زیاد یه نفر هست که کمکت کنه.
  • ادغام با ابزارهای دیگر: PyTorch به خوبی با ابزارهای دیگه مثل Numpy و Scikit-Learn سازگار هست و این یعنی می‌تونی به راحتی ازشون کنار هم استفاده کنی.

استفاده‌های معروف از PyTorch

از زمان معرفی، PyTorch توی خیلی از پروژه‌های بزرگ و معروف استفاده شده. بیا با هم چندتا از این پروژه‌ها رو بررسی کنیم:

  • فیسبوک: خب معلومه دیگه، خود فیسبوک کلی از PyTorch توی پروژه‌هاش استفاده می‌کنه. مثلا برای توسعه مدل‌های مختلف یادگیری عمیق توی مسنجر، اینستاگرام و بخش‌های دیگه.
  • تسلا: تسلا هم از PyTorch برای توسعه الگوریتم‌های پیشرفته‌ی خودران استفاده می‌کنه. این یعنی اون ماشین‌های خودران باحال تسلا، بخشی از هوششون رو مدیون PyTorch هستن.
  • اوبر: شرکت اوبر هم برای بهبود الگوریتم‌های مسیریابی و پیش‌بینی تقاضا از PyTorch استفاده می‌کنه. با این کار می‌تونن سرویس بهتری به مشتری‌هاشون بدن.

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

ساختار و اجزای PyTorch

یکی از دلایل اصلی محبوبیت PyTorch، ساختار ساده و قابل فهمشه. PyTorch از چندین جزء کلیدی تشکیل شده که هر کدوم وظیفه خاصی دارن. در این بخش به معرفی این اجزا می‌پردازیم.

Tensor

Tensorها، اساس محاسبات PyTorch هستن. اگه قبلاً با آرایه‌های Numpy کار کرده باشی، با مفهوم Tensor به راحتی آشنا می‌شی. یه Tensor، یه ساختار داده‌ای چند بعدیه که می‌تونه روی CPU یا GPU محاسبات انجام بده.

import torch
# تعریف یک Tensor دو بعدی
x = torch.tensor([[1, 2], [3, 4]])
print(x)

Autograd

Autograd یکی دیگه از اجزای کلیدی PyTorch هست که برای محاسبه خودکار گرادیان‌ها استفاده می‌شه. این ویژگی بهت کمک می‌کنه تا به راحتی مدل‌های پیچیده یادگیری عمیق رو آموزش بدی.

# تعریف یک Tensor با قابلیت محاسبه گرادیان
x = torch.tensor([[1., 2.], [3., 4.]], requires_grad=True)
# انجام محاسبات
y = x**2
# محاسبه گرادیان‌ها
y.backward(torch.ones_like(x))
print(x.grad)

nn.Module

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

import torch.nn as nn
# تعریف یک مدل ساده
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

Optimizer

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

import torch.optim as optim
# ایجاد بهینه‌ساز
optimizer = optim.SGD(model.parameters(), lr=0.01)
# آموزش مدل
for epoch in range(5):
    for inputs, targets in train_loader:
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

ساخت یک شبکه عصبی با PyTorch

خب، حالا که با اجزای اصلی PyTorch آشنا شدی، بیا با هم یه شبکه عصبی ساده رو بسازیم و آموزش بدیم. برای این کار از مجموعه داده معروف MNIST استفاده می‌کنیم که شامل تصاویر دست‌نوشته اعداد از 0 تا 9 هست. هدف ما اینه که یه مدل بسازیم که بتونه این اعداد رو تشخیص بده.

بارگذاری و پیش‌پردازش داده‌ها

اول از همه، باید داده‌ها رو بارگذاری کنیم و اونا رو برای مدل آماده کنیم. PyTorch کتابخونه‌ای به نام torchvision داره که شامل مجموعه داده‌های معروف و توابع پیش‌پردازش هست.

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
# تبدیل تصاویر به Tensor و نرمال‌سازی اونا
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
# بارگذاری داده‌های آموزشی
train_data = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)

تعریف مدل

حالا که داده‌ها آماده‌س، می‌ریم سراغ تعریف مدل. مدل ما شامل چندین لایه‌ی ساده‌ی شبکه عصبی هست که با هم ترکیب می‌شن تا تصاویر رو تحلیل کنن.

class MNISTModel(nn.Module):
    def __init__(self):
        super(MNISTModel, self).__init__()
        self.fc1 = nn.Linear(28*28, 128)  # لایه‌ی اول: تبدیل تصویر 28x28 به یک بردار 128 تایی
        self.fc2 = nn.Linear(128, 64)     # لایه‌ی دوم: کاهش ابعاد به 64
        self.fc3 = nn.Linear(64, 10)      # لایه‌ی سوم: خروجی 10 کلاسی برای اعداد 0 تا 9
    def forward(self, x):
        x = x.view(-1, 28*28)  # مسطح کردن تصویر به یک بردار 784 تایی
        x = torch.relu(self.fc1(x))  # اعمال تابع فعال‌سازی ReLU روی لایه‌ی اول
        x = torch.relu(self.fc2(x))  # اعمال ReLU روی لایه‌ی دوم
        x = self.fc3(x)  # خروجی نهایی
        return x
model = MNISTModel()

تعریف معیار خطا و بهینه‌ساز

برای آموزش مدل، نیاز داریم تا یک معیار خطا (Loss Function) و یک بهینه‌ساز (Optimizer) تعریف کنیم. در اینجا از معیار خطای Cross Entropy و بهینه‌ساز SGD استفاده می‌کنیم.

criterion = nn.CrossEntropyLoss()  # معیار خطا
optimizer = optim.SGD(model.parameters(), lr=0.01)  # بهینه‌ساز

آموزش مدل

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

for epoch in range(5):  # تعداد دورهای آموزش
    for inputs, targets in train_loader:
        outputs = model(inputs)  # عبور داده‌ها از مدل
        loss = criterion(outputs, targets)  # محاسبه خطا
        optimizer.zero_grad()  # صفر کردن گرادیان‌ها
        loss.backward()  # محاسبه گرادیان‌ها
        optimizer.step()  # به‌روزرسانی وزن‌ها
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

با اجرای این کد، مدل ما پنج بار (epoch) روی کل داده‌های آموزشی تمرین می‌کنه. تو هر epoch، خطای مدل محاسبه و وزن‌های اون به‌روزرسانی می‌شن تا مدل بتونه به مرور زمان دقت بیشتری پیدا کنه.

ارزیابی مدل

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

# بارگذاری داده‌های تست
test_data = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=64, shuffle=False)
# ارزیابی مدل
correct = 0
total = 0
with torch.no_grad():  # نیازی به محاسبه گرادیان‌ها نداریم
    for inputs, targets in test_loader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += targets.size(0)
        correct += (predicted == targets).sum().item()
print(f'Accuracy: {100 * correct / total}%')

این کد دقت مدل رو روی داده‌های تست محاسبه می‌کنه. امیدوارم که دقت مدل نزدیک به ۹۹٪ باشه، که یعنی مدل ما خیلی خوب یاد گرفته که اعداد دست‌نوشته رو تشخیص بده.

معایب PyTorch

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

  • پشتیبانی کمتر از تولید: در مقایسه با بعضی از کتابخانه‌های دیگه مثل TensorFlow، کتابخانه PyTorch کمتر برای محیط‌های تولیدی بهینه‌سازی شده. این یعنی ممکنه برای بردن مدل‌هات به مرحله‌ی تولید نیاز به کار بیشتری داشته باشی.
  • نصب و راه‌اندازی پیچیده: برای مبتدی‌ها، نصب و راه‌اندازی PyTorch ممکنه کمی پیچیده باشه، به خصوص اگه بخوای از GPU استفاده کنی. البته مستندات و راهنماهای خوبی وجود دارن، ولی همچنان این موضوع می‌تونه یه چالش باشه.
  • کمبود ابزارهای تولیدی پیشرفته: PyTorch نسبت به TensorFlow ابزارهای کمتری برای استقرار مدل‌ها در محیط‌های تولیدی داره. این می‌تونه برای شرکت‌ها و تیم‌های بزرگ که نیاز به ابزارهای پیشرفته برای مانیتورینگ و دیپلوی مدل‌ها دارن، یه نقطه ضعف باشه.
  • پشتیبانی از زبان‌های دیگر: در حالی که TensorFlow از زبان‌های مختلفی مثل C++ و JavaScript پشتیبانی می‌کنه، PyTorch بیشتر روی پایتون تمرکز داره. این می‌تونه برای کسانی که نیاز به استفاده از زبان‌های دیگه دارن، محدودیت ایجاد کنه.

مقایسه PyTorch با دیگر کتابخانه‌ها

وقتی صحبت از یادگیری عمیق می‌شه، انتخاب کتابخونه مناسب خیلی مهمه. بیایید با هم ببینیم PyTorch چطور با کتابخونه‌های دیگه مثل TensorFlow و Keras مقایسه می‌شه.

PyTorch در مقابل TensorFlow

TensorFlow یکی از معروف‌ترین و پرکاربردترین کتابخونه‌های یادگیری عمیقه که توسط گوگل توسعه داده شده. بیایید با هم ویژگی‌های اصلی این دو کتابخونه رو مقایسه کنیم:

ویژگی

PyTorch

TensorFlow

محاسبات گراف‌های پویا

بله

بله (از نسخه 2.0 به بعد)

زبان برنامه‌نویسی

پایتون

پایتون، C++، JavaScript

سادگی و خوانایی

بسیار ساده و خوانا

نسبتاً پیچیده

پشتیبانی از GPU

بله

بله

پشتیبانی از تولید

کمتر

بیشتر

جامعه‌ی کاربری

رو به رشد

بسیار بزرگ

ادغام با ابزارهای دیگر

عالی

عالی

  • محاسبات گراف‌های پویا: یکی از بزرگ‌ترین تفاوت‌ها بین PyTorch و نسخه‌های اولیه TensorFlow در پشتیبانی از محاسبات گراف‌های پویا بود. این ویژگی به کاربرا اجازه می‌ده تا گراف محاسباتی خودشون رو هنگام اجرا تعریف کنن. TensorFlow 2.0 این ویژگی رو اضافه کرد و حالا هر دو کتابخونه از این قابلیت پشتیبانی می‌کنن.
  • زبان برنامه‌نویسی: PyTorch بیشتر روی پایتون تمرکز داره، در حالی که TensorFlow از زبان‌های مختلفی مثل پایتون، C++ و JavaScript پشتیبانی می‌کنه. این یعنی اگه پروژه‌ای داری که نیاز به استفاده از زبان‌های مختلف داره، TensorFlow ممکنه انتخاب بهتری باشه.
  • سادگی و خوانایی: کدهای PyTorch به خاطر استفاده از پایتون و ساختار ساده‌ش، خیلی خوانا و قابل فهم هستن. این ویژگی باعث شده PyTorch بین محققین و توسعه‌دهنده‌ها محبوب بشه. از طرف دیگه، TensorFlow کمی پیچیده‌تره و ممکنه برای مبتدی‌ها سخت‌تر باشه.
  • پشتیبانی از GPU: هر دو کتابخونه به خوبی از GPU پشتیبانی می‌کنن که این باعث می‌شه بتونی محاسبات سنگین رو سریع‌تر انجام بدی.
  • پشتیبانی از تولید: TensorFlow به خاطر داشتن ابزارهای پیشرفته برای استقرار مدل‌ها در محیط‌های تولیدی، یه انتخاب عالی برای پروژه‌های بزرگ و صنعتی محسوب می‌شه. PyTorch هم در این زمینه داره پیشرفت می‌کنه ولی هنوز به کاملی TensorFlow نیست.
  • جامعه‌ی کاربری: هر دو کتابخونه جامعه‌ی کاربری بزرگی دارن ولی جامعه‌ی TensorFlow به خاطر قدمت بیشترش، بزرگ‌تره. این یعنی مستندات، آموزش‌ها و منابع بیشتری برای TensorFlow وجود داره.

PyTorch  در مقابل Keras

Keras یه کتابخونه سطح بالای یادگیری عمیقه که برای ساخت و آموزش مدل‌ها به صورت ساده و سریع طراحی شده. در واقع Keras به عنوان یه واسط برای کتابخونه‌های دیگه مثل TensorFlow و Theano عمل می‌کنه.

ویژگی

PyTorch

Keras

سادگی و خوانایی

ساده و خوانا

بسیار ساده و خوانا

محاسبات گراف‌های پویا

بله

خیر

پشتیبانی از GPU

بله

بله (از طریق TensorFlow)

پشتیبانی از تولید

کمتر

بیشتر (از طریق TensorFlow)

جامعه‌ی کاربری

رو به رشد

بزرگ (به خصوص با TensorFlow)

  • سادگی و خوانایی: Keras برای ساده‌سازی فرآیند ساخت و آموزش مدل‌ها طراحی شده و به خاطر واسط کاربری ساده‌ش، بین مبتدی‌ها و توسعه‌دهنده‌ها خیلی محبوبه. PyTorch هم ساده‌س ولی Keras به خاطر طراحی سطح بالاش، برای کارهای سریع و ساده مناسب‌تره.
  • محاسبات گراف‌های پویا: اینجا PyTorch برتری داره چون از محاسبات گراف‌های پویا پشتیبانی می‌کنه، در حالی که Keras این ویژگی رو نداره. این یعنی با PyTorch می‌تونی مدل‌هایی بسازی که در زمان اجرا تغییر کنن.
  • پشتیبانی از GPU: هر دو کتابخونه به خوبی از GPU پشتیبانی می‌کنن، ولی Keras از طریق TensorFlow به GPU دسترسی داره.
  • پشتیبانی از تولید: Keras به خاطر استفاده از TensorFlow در بک‌اند، از ابزارهای تولیدی پیشرفته‌ای که TensorFlow ارائه می‌ده بهره می‌بره. این یعنی Keras برای پروژه‌های تولیدی هم مناسبه.
  • جامعه‌ی کاربری: Keras به خاطر همکاری نزدیکش با TensorFlow، جامعه‌ی کاربری بزرگی داره و منابع و آموزش‌های زیادی براش موجوده.

PyTorch با داشتن محاسبات گراف‌های پویا، سادگی و خوانایی کدها و پشتیبانی قوی از GPU، یه انتخاب عالی برای محققین و توسعه‌دهنده‌های یادگیری عمیق به حساب میاد. در عین حال، اگه دنبال یه ابزار ساده‌تر برای شروع هستی، Keras می‌تونه گزینه خوبی باشه. و اگه نیاز به پشتیبانی قوی برای تولید داری، TensorFlow با ابزارهای پیشرفته‌ش می‌تونه بهترین انتخاب باشه.

"PyTorch به خاطر انعطاف‌پذیری و راحتی استفاده، تبدیل به ابزار مورد علاقه‌ی خیلی از محققان و توسعه‌دهنده‌ها توی زمینه‌ی یادگیری عمیق شده." - یان لوکون

مثال‌های کاربردی با PyTorch

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

طبقه‌بندی تصاویر با CIFAR-10

طبقه‌بندی تصاویر با استفاده از مجموعه داده‌ی CIFAR-10. این مجموعه داده شامل ۶۰,۰۰۰ تصویر رنگی در ۱۰ کلاس مختلف مثل هواپیما، ماشین، پرنده و غیره هست.

۱. بارگذاری و پیش‌پردازش داده‌ها

مثل همیشه، اول داده‌ها رو بارگذاری و پیش‌پردازش می‌کنیم.

# بارگذاری داده‌ها
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
train_data = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)

۲. تعریف مدل

مدل ما شامل چند لایه کانولوشن (Conv) و لایه‌های کامل متصل (Fully Connected) هست.

class CIFAR10Model(nn.Module):
    def __init__(self):
        super(CIFAR10Model, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, 3, 1)  # لایه کانولوشن اول
        self.conv2 = nn.Conv2d(32, 64, 3, 1)  # لایه کانولوشن دوم
        self.fc1 = nn.Linear(64*6*6, 128)  # لایه کامل متصل اول
        self.fc2 = nn.Linear(128, 10)  # لایه کامل متصل دوم
    def forward(self, x):
        x = torch.relu(self.conv1(x))  # اعمال ReLU روی لایه کانولوشن اول
        x = torch.relu(self.conv2(x))  # اعمال ReLU روی لایه کانولوشن دوم
        x = torch.flatten(x, 1)  # مسطح کردن ورودی
        x = torch.relu(self.fc1(x))  # اعمال ReLU روی لایه کامل متصل اول
        x = self.fc2(x)  # خروجی نهایی
        return x
model = CIFAR10Model()

۳. تعریف معیار خطا و بهینه‌ساز

برای این مدل هم از Cross Entropy Loss و SGD استفاده می‌کنیم.

criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

۴. آموزش مدل

مدل رو آموزش می‌دیم تا تصاویر رو به خوبی طبقه‌بندی کنه.

for epoch in range(5):
    for inputs, targets in train_loader:
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

۵. ارزیابی مدل

حالا دقت مدل رو روی داده‌های تست بررسی می‌کنیم.

test_data = datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=64, shuffle=False)
correct = 0
total = 0
with torch.no_grad():
    for inputs, targets in test_loader:
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += targets.size(0)
        correct += (predicted == targets).sum().item()
print(f'Accuracy: {100 * correct / total}%')

این کد دقت مدل رو روی داده‌های تست محاسبه می‌کنه. اگر همه چیز درست باشه، باید یه دقت خوب برای طبقه‌بندی تصاویر داشته باشیم.

مثال سوم: ترجمه ماشینی با Seq2Seq

حالا بریم سراغ یه مثال جذاب‌تر؛ ترجمه ماشینی با استفاده از مدل Seq2Seq. این مدل برای ترجمه متون از یه زبان به زبان دیگه استفاده می‌شه.

۱. تعریف مدل Seq2Seq

مدل Seq2Seq شامل یه شبکه‌ی LSTM برای رمزگذار (Encoder) و یه شبکه‌ی LSTM دیگه برای رمزگشا (Decoder) هست.

class Seq2Seq(nn.Module):
    def __init__(self, input_dim, output_dim, hidden_dim):
        super(Seq2Seq, self).__init__()
        self.encoder = nn.LSTM(input_dim, hidden_dim, batch_first=True)
        self.decoder = nn.LSTM(hidden_dim, output_dim, batch_first=True)
    def forward(self, x):
        encoder_outputs, (hidden, cell) = self.encoder(x)
        decoder_outputs, _ = self.decoder(encoder_outputs, (hidden, cell))
        return decoder_outputs
# ایجاد مدل
model = Seq2Seq(input_dim=10, output_dim=10, hidden_dim=50)

۲. تعریف معیار خطا و بهینه‌ساز

برای این مدل از معیار خطای MSE و بهینه‌ساز Adam استفاده می‌کنیم.

criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

۳. آموزش مدل

مدل رو با داده‌های ورودی و خروجی فرضی آموزش می‌دیم.

inputs = torch.randn(64, 10, 10)
targets = torch.randn(64, 10, 10)
for epoch in range(5):
    outputs = model(inputs)
    loss = criterion(outputs, targets)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    print(f'Epoch {epoch+1}, Loss: {loss.item()}')

با این کد، مدل Seq2Seq ما تمرین می‌کنه تا داده‌های ورودی رو به خروجی‌های مناسب ترجمه کنه.

۴. ارزیابی مدل

برای ارزیابی مدل، می‌تونیم دقت ترجمه‌ها رو روی داده‌های جدید بسنجیم. البته این بخش توی این مثال فرضی نیست، ولی می‌تونی با داده‌های واقعی این کارو انجام بدی.

با این مثال‌ها، حالا می‌تونی ببینی که چطور می‌تونی با استفاده از PyTorch مدل‌های مختلف یادگیری عمیق رو بسازی و آموزش بدی. امیدوارم که این توضیحات کمک کرده باشه تا بهتر درک کنی چطور می‌تونی از PyTorch استفاده کنی و ازش لذت ببری!

سوالات متداول

1. PyTorch چیه؟

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

2. چرا باید از PyTorch استفاده کنم؟

PyTorch به خاطر سادگی و انعطاف‌پذیری بالا، پشتیبانی از محاسبات گراف‌های پویا و استفاده از GPU، یکی از محبوب‌ترین کتابخونه‌های یادگیری عمیقه.

3. چطوری می‌تونم PyTorch رو نصب کنم؟

می‌تونی با استفاده از دستور pip install torch اون رو نصب کنی. همچنین می‌تونی راهنمای نصب رسمی رو از وبسایت PyTorch ببینی.

4. تفاوت PyTorch با TensorFlow چیه؟

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

5. آیا PyTorch برای مبتدی‌ها مناسبه؟

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

6. چطوری می‌تونم یه مدل ساده با PyTorch بسازم؟

برای ساخت یه مدل ساده با PyTorch، می‌تونی از کلاس nn.Module استفاده کنی و لایه‌های مختلف مدل خودتو تعریف کنی. بعدش با استفاده از معیار خطا و بهینه‌ساز، مدل خودتو آموزش بدی.

7. PyTorch از چه نوع داده‌هایی پشتیبانی می‌کنه؟

PyTorch از انواع داده‌های مختلفی مثل Tensorها، داده‌های تصویری، صوتی و متنی پشتیبانی می‌کنه و قابلیت پردازش موازی با استفاده از GPU رو داره.

8. آیا می‌تونم مدل‌های PyTorch خودمو ذخیره کنم؟

بله، می‌تونی مدل‌های PyTorch خودتو با استفاده از تابع torch.save ذخیره کنی و بعداً با استفاده از تابع torch.load اونا رو بارگذاری کنی.

9. PyTorch چطوری بهینه‌سازی می‌شه؟

PyTorch از بهینه‌سازهای مختلفی مثل SGD، Adam و RMSprop پشتیبانی می‌کنه که می‌تونی با توجه به نیازهای خودت از اونا استفاده کنی.

10. چه نوع پروژه‌هایی می‌تونم با PyTorch انجام بدم؟

با PyTorch می‌تونی پروژه‌های مختلفی مثل تشخیص تصویر، ترجمه ماشینی، تحلیل داده‌های صوتی و متنی، و خیلی پروژه‌های دیگه یادگیری عمیق رو انجام بدی.

جمع‌بندی

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

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

۰ دیدگاه
ما همه سوالات و دیدگاه‌ها رو می‌خونیم و پاسخ میدیم
  • PyTorch چیست؟
  • چرا PyTorch؟
  • ویژگی‌های اصلی PyTorch
  • استفاده‌های معروف از PyTorch
  • ساختار و اجزای PyTorch
  • ساخت یک شبکه عصبی با PyTorch
  • معایب PyTorch
  • مقایسه PyTorch با دیگر کتابخانه‌ها
  • مثال‌های کاربردی با PyTorch
  • سوالات متداول
  • جمع‌بندی
اشتراک گذاری مقاله در :