PyTorch và lập trình hướng đối tượng

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Bạn sẽ học gì

Cách huấn luyện mô hình deep learning vững chắc:

  • Cải thiện huấn luyện với optimizer
  • Giảm hiện tượng mất/bùng nổ gradient
  • Mạng nơ-ron tích chập (CNN)
  • Mạng nơ-ron hồi quy (RNN)
  • Mô hình đa đầu vào/đa đầu ra

 

 

Logo PyTorch

Deep Learning nâng cao với PyTorch

Yêu cầu tiên quyết

Khoá học giả định bạn đã nắm các chủ đề sau:

  • Huấn luyện mạng nơ-ron:

    • Lan truyền thuận
    • Tính loss
    • Lan truyền ngược (backpropagation)
  • Huấn luyện mô hình với PyTorch:

    • Dataset và DataLoader
    • Vòng lặp huấn luyện
    • Đánh giá mô hình
  • Khoá học tiên quyết: Introduction to Deep Learning with PyTorch

Deep Learning nâng cao với PyTorch

Lập trình hướng đối tượng (OOP)

  • Ta sẽ dùng OOP để định nghĩa:

    • PyTorch Dataset
    • PyTorch Model
  • Trong OOP, ta tạo đối tượng với:

    • Khả năng (phương thức)
    • Dữ liệu (thuộc tính)
Deep Learning nâng cao với PyTorch

Lập trình hướng đối tượng (OOP)

class BankAccount:
    def __init__(self, balance):
        self.balance = balance
  • __init__ được gọi khi tạo đối tượng BankAccount
  • balance là thuộc tính của đối tượng BankAccount
account = BankAccount(100)
print(account.balance)
100
Deep Learning nâng cao với PyTorch

Lập trình hướng đối tượng (OOP)

  • Phương thức: hàm Python để thực hiện tác vụ
  • Phương thức deposit tăng số dư
class BankAccount:
    def __init__(self, balance):
        self.balance = balance


def deposit(self, amount): self.balance += amount
account = BankAccount(100)
account.deposit(50)
print(account.balance)
150
Deep Learning nâng cao với PyTorch

Bộ dữ liệu khả năng uống của nước

Pandas DataFrame hiển thị vài dòng đầu và cuối của dữ liệu độ uống được của nước.

Deep Learning nâng cao với PyTorch

PyTorch Dataset

from torch.utils.data import Dataset

class WaterDataset(Dataset):

def __init__(self, csv_path): super().__init__() df = pd.read_csv(csv_path) self.data = df.to_numpy()
def __len__(self): return self.data.shape[0]
def __getitem__(self, idx): features = self.data[idx, :-1] label = self.data[idx, -1] return features, label
  • init: tải dữ liệu, lưu thành mảng numpy
    • super().__init__() đảm bảo WaterDataset hoạt động như Dataset của torch
  • len: trả về kích thước tập dữ liệu
  • getitem:
    • nhận một tham số idx
    • trả về đặc trưng và nhãn cho một mẫu tại chỉ số idx
Deep Learning nâng cao với PyTorch

PyTorch DataLoader

dataset_train = WaterDataset(
    "water_train.csv"
)
from torch.utils.data import DataLoader

dataloader_train = DataLoader(
    dataset_train,
    batch_size=2,
    shuffle=True,
)
features, labels = next(iter(dataloader_train))
print(f"Features: {features},\nLabels: {labels}")
Features: tensor([
  [0.4899, 0.4180, 0.6299, 0.3496, 0.4575,
   0.3615, 0.3259, 0.5011, 0.7545],
  [0.7953, 0.6305, 0.4480, 0.6549, 0.7813,
   0.6566, 0.6340, 0.5493, 0.5789]
]),
Labels: tensor([1., 0.])
Deep Learning nâng cao với PyTorch

Mô hình PyTorch

Định nghĩa mô hình Sequential:

net = nn.Sequential(
  nn.Linear(9, 16),
  nn.ReLU(),
  nn.Linear(16, 8),
  nn.ReLU(),
  nn.Linear(8, 1),
  nn.Sigmoid(),
)

Định nghĩa mô hình bằng lớp:

class Net(nn.Module):

def __init__(self): super().__init__() self.fc1 = nn.Linear(9, 16) self.fc2 = nn.Linear(16, 8) self.fc3 = nn.Linear(8, 1)
def forward(self, x): x = nn.functional.relu(self.fc1(x)) x = nn.functional.relu(self.fc2(x)) x = nn.functional.sigmoid(self.fc3(x)) return x net = Net()
Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...