PyTorch: فریمورک اپن‌‌سورس فیسبوک برای توسعهٔ دیپ لرنینگ

PyTorch: فریمورک اپن‌‌سورس فیسبوک برای توسعهٔ دیپ لرنینگ

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

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

فیسبوک ادعا می‌کند که با استفاده از PyTorch، دولوپرها می‌توانند از جست‌وجو و تحقیق به کارایی و تولید برسند؛ همچنین این شرکت ادعا می‌کند که فریمورک PyTorch به‌ دلایلی همچون برنامه‌نویسی منعطف، امکان تولید نمونه‌های اولیه (پروتوتایپ) و انجام کارهای آزمایشی را تسهیل می‌کند. به عنوان نمونه سورس‌کد این فریمورک داریم:

import torch
from torch.autograd import Variable
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 5x5 square convolution
        # kernel
        self.conv1 = nn.Conv2d(1, 6, 5)
        self.conv2 = nn.Conv2d(6, 16, 5)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)

در سال ۲۰۱۷، فیسبوک با همکاری مایکروسافت دست به ابداع ONNX زد که به منظور جابه‌جایی راحت‌تر بین فریمورک‌ها از آن استفاده می‌شد (ONNX مخفف واژگان Open Neural Network Exchange است.) حال این دو شرکت‌ سرویس ONNX و PyTorch را با هم ادغام کرده‌اند تا این پلتفرم‌ها به راحتی با دیگر فریمورک‌ها کار کنند و توسعه‌دهندگان بتوانند برای نیازهای مختلف خود از آن‌ها استفاده کنند.