PyTorch یک کتابخانه یادگیری ماشین متنباز است که در اصل توسط آزمایشگاه تحقیقات هوش مصنوعی فیسبوک (FAIR) توسعه یافته است. این کتابخانه به طور گسترده برای کارهای مختلف یادگیری ماشین و یادگیری عمیق، از جمله توسعه شبکههای عصبی، پردازش زبان طبیعی (NLP)، بینایی کامپیوتر و یادگیری تقویتی استفاده میشود. در این برگه تقلب PyTorch، تمام اصول کار با PyTorch را به صورت یکجا بیاموزید!

قبل از برگه تقلب PyTorch
قبل از اینکه بریم سراغ برگه تقلب PyTorch لازم هست تعدادی از تعاریف یادگیری عمیق رو بررسی کنیم. همچنین اگر دوست دارید این مباحث رو با ساده ترین بیان ممکن بیاموزید، حتما از آموزش رایگان شبکه عصبی و یادگیری عمیق دیتایاد استفاده کنید.
- PyTorch یکی از محبوبترین فریمورکهای یادگیری عمیق است که سینتکسی شبیه به NumPy دارد.
- در محیط PyTorch، میتوانید Tensor را مانند یک آرایه NumPy در نظر بگیرید که قابلیت اجرا روی CPU یا GPU را دارد و دارای متدی برای مشتقگیری خودکار (که برای پسانتشار یا Backpropagation لازم است) میباشد.
- پکیجهای TorchText، TorchVision و TorchAudio کتابخانههای پایتونی هستند که به ترتیب قابلیتهای کار با دادههای متنی، تصویری و صوتی را به PyTorch اضافه میکنند.
- یک شبکه عصبی متشکل از نورونها است که در قالب لایهها سازماندهی شدهاند. مقادیر ورودی به اولین لایه از شبکه عصبی فرستاده میشوند. هر نورون دو ویژگی دارد: یک وزن و یک بایاس. خروجی یک نورون در شبکه عصبی، مجموع وزندار ورودیهای آن به علاوه مقدار بایاس است. این خروجی به نورونهای متصل در لایه بعدی منتقل میشود و این فرآیند تا رسیدن به لایه نهایی شبکه ادامه مییابد.
- یک تابع فعالساز تبدیلی روی خروجی یک نورون اعمال میکند و برای وارد کردن غیرخطی بودن به محاسبات استفاده میشود.
- پسانتشار (Backpropagation) الگوریتمی برای آموزش شبکههای عصبی است که این کار را از طریق تنظیم مکرر وزنها و بایاسهای هر نورون انجام میدهد.
- اشباع (Saturation) زمانی رخ میدهد که خروجی یک نورون به حداکثر یا حداقل مقدار خود برسد که فراتر از آن تغییر نمیکند. این پدیده میتواند عملکرد یادگیری را کاهش دهد و برای جلوگیری از آن ممکن است به یک تابع فعالساز مانند ReLU نیاز باشد.
- تابع هزینه تفاوت بین خروجی پیشبینیشده مدل و خروجی واقعی (هدف) را اندازهگیری و کمیسازی میکند.
- بهینهساز الگوریتمی برای تنظیم پارامترها (وزنها و بایاسهای نورون) در طول فرآیند آموزش شبکه عصبی است تا تابع هزینه به حداقل برسد.
- نرخ یادگیری اندازه گام بهینهساز را کنترل میکند. اگر نرخ یادگیری خیلی کم باشد، بهینهسازی زمان زیادی طول خواهد کشید. اگر خیلی زیاد باشد، بهینهساز نمیتواند به طور موثری تابع هزینه را کمینه کند و این امر منجر به پیشبینیهای ضعیف میشود.
- مومنتم (Momentum) اینرسی بهینهساز را کنترل میکند. اگر مومنتم خیلی کم باشد، ممکن است بهینهساز در یک مینیمم محلی گیر کند و پاسخ نادرستی بدهد. اگر خیلی زیاد باشد، ممکن است بهینهساز همگرا نشود و پاسخی ارائه ندهد.
- یادگیری انتقالی به معنای استفاده مجدد از یک مدل آموزشدیده روی یک کار مشخص برای کار مشابه دوم است تا فرآیند آموزش سرعت بیشتری بگیرد.
- تنظیم دقیق (Fine-tuning) نوعی از یادگیری انتقالی است که در آن لایههای اولیه ثابت (منجمد) میمانند و فقط لایههای نزدیک به خروجی آموزش داده میشوند.
- دقت (Accuracy) معیاری برای سنجش میزان انطباق مدل با یک مجموعه داده است. این معیار نسبت نتایج پیشبینیشده درست (چه دستهبندی و چه پیشبینی) را در مقایسه با تعداد کل دادههای موجود در مجموعه داده اندازهگیری میکند.
وارد کردن PyTorch
# Import the top-level package for core functionality import torch # Import neural network functionality from torch import nn # Import functional programming tools import torch.nn.functional as F # Import optimization functionality import torch.optim as optim # Import dataset functions from torch.utils.data import TensorDataset, DataLoader # Import evaluation metrics import torchmetrics
کار با تنسورها
# Create tensor from list with tensor() tnsr = torch.tensor([1, 3, 6, 10]) # Get data type of tensor elements with .dtype tnsr.dtype # Returns torch.int64 # Get dimensions of tensor with .Size() tnsr.shape # Returns torch.Size([4]) # Get memory location of tensor with .device tnsr.device # Returns cpu or gpu # Create a tensor of zeros with zeros() tnsr_zrs = torch.zeros(2, 3) # Create a random tensor with rand() tnsr_rndm = torch.rand(size=(3, 4)) # Tensor has 3 rows, 4 columns
دیتاستها و دیتالودرها
# Create a dataset from a pandas DataFrame with TensorDataset() X = df[feature_columns].values y = df[target_column].values dataset = TensorDataset(torch.tensor(X).float(), torch.tensor(y).float()) # Load the data in batches with DataLoader() dataloader = DataLoader(dataset, batch_size=n, shuffle=True)
پیشپردازش
# One-hot encode categorical variables with one_hot() F.one_hot(torch.tensor([0, 1, 2]), num_classes=3) # Returns tensor of 0s and 1s
معماری مدل Sequential
# Create a linear layer with m inputs, n outputs with Linear()
lnr = nn.Linear(m, n)
# Get weight of layer with .weight
lnr.weight
# Get bias of layer with .bias
lnr.bias
# Create a sigmoid activation layer for binary classification with Sigmoid()
nn.Sigmoid()
# Create a softmax activation layer for multi-class classification with Softmax()
nn.Softmax(dim=-1)
# Create a rectified linear unit activation layer to avoid saturation with ReLU()
nn.ReLU()
# Create a leaky rectified linear unit activation layer to avoid saturation with LeakyReLU()
nn.LeakyReLU(negative_slope=0.05)
# Create a dropout layer to regularize and prevent overfitting with Dropout()
nn.Dropout(p=0.5)
# Create a sequential model from layers
model = nn.Sequential(
nn.Linear(n_features, i),
nn.Linear(i, j), # Input size must match output from previous layer
nn.Linear(j, n_classes),
nn.Softmax(dim=-1) # Activation layer comes last
)
آموزش مدل و محاسبه زیان
# Fit a model to input data with model where model is a variable created by, e.g., Sequential() prediction = model(input_data).double() # Get target values actual = torch.tensor(target_values).double() # Calculate the mean-squared error loss for regression with MSELoss() mse_loss = nn.MSELoss()(prediction, actual) # Returns tensor(x) # Calculate the L1 loss for robust regression with SmoothL1Loss() l1_loss = nn.SmoothL1Loss()(prediction, actual) # Returns tensor(x) # Calculate binary cross-entropy loss for binary classification with BCELoss() bce_loss = nn.BCELoss()(prediction, actual) # Returns tensor(x) # Calculate cross-entropy loss for multi-class classification with CrossEntropyLoss() ce_loss = nn.CrossEntropyLoss()(prediction, actual) # Returns tensor(x) # Calculate the gradients via backprogagation with .backward() loss.backward()
کار با بهینهسازها
# Create a stochastic gradient descent optimizer with SGD(), setting learning rate and momentum optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.95) # Update neuron parameters with .step() optimizer.step()
حلقه آموزش
# Set model to training mode
model.train()
# Set a loss criterion and an optimizer
loss_criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.95)
# Loop over chunks of data in the training set
for data in dataloader:
# Set the gradients to zero with .zero_grad()
optimizer.zero_grad()
# Get features and targets for current chunk of data
features, targets = data
# Run a "forward pass" to fit the model to the data
predictions = model(data)
# Calculate loss
loss = loss_criterion(predictions, targets)
# Calculate gradients using backprogagation
loss.backward()
# Update the model parameters
optimizer.step()
حلقه ارزیابی
# Set model to evaluation mode
model.eval()
# Create accuracy metric with Accuracy()
metric = torchmetrics.Accuracy(task="multiclass", num_classes=3)
# Loop of chunks of data in the validation set
for i, data in enumerate(dataloader, 0):
# Get features and targets for current chunk of data
features, targets = data
# Run a "forward pass" to fit the model to the data
predictions = model(data)
# Calculate accuracy over the batch
accuracy = metric(output, predictions.argmax(dim=-1))
# Calculate accuracy over all the validation data
accuracy = metric.compute()
print(f"Accuracy on all data: {accuracy}")
# Reset the metric for the next dataset (training or validation)
metric.reset()
یادگیری انتقالی و تنظیم دقیق
# Save a layer of a model to a file with save()
torch.save(layer, 'layer.pth')
# Load a layer of a model from a file with load()
new_layer = torch.load('layer.pth')
# Freeze the weight for layer 0 with .requires_grad
for name, param in model.named_parameters():
if name == "0.weight":
param.requires_grad = False
از برگه تقلب برای PyTorch تا مدیریت پروژههای بزرگ هوش مصنوعی
داشتن یک برگه تقلب برای PyTorch شروع هوشمندانهای است، اما دنیای واقعی هوش مصنوعی بسیار فراتر از دانستن توابع و کلاسهاست. برای اینکه بتوانید از این ابزارهای قدرتمند در حل چالشهای واقعی صنعت استفاده کنید، باید دیدگاه سیستمی و درک عمیقی از زیرساختهای ریاضیاتی و الگوریتمی داشته باشید تا بدانید در هر سناریو، کدام بهینهساز یا تابع فعالساز بهترین عملکرد را خواهد داشت.
اگر هدف شما این است که به جای صرفاً کپی کردن کدها، آنها را طراحی و بهینهسازی کنید، حضور در یک آموزش جامع هوش مصنوعی با پایتون به شما کمک میکند تا نقشه راه تبدیل شدن به یک متخصص ارشد را از صفر تا صد طی کنید و تمام مهارتهای لازم از ریاضیات تا مدلهای زبانی پیشرفته را برای ورود به بازار کار بهدست آورید.
- تسلط بر پیادهسازی پروژههای پیشرفته بینایی ماشین و پردازش زبان طبیعی (NLP)
- درک عمیق منطق پشت پرده پسانتشار و ریاضیاتِ بهینهسازی مدلها
- کسب مهارتهای کاربردی برای تبدیل شدن به یک متخصص AI مورد نیاز در بازار کار

