Mô hình PyTorch
Bạn sẽ dùng cách tiếp cận OOP để định nghĩa kiến trúc mô hình. Hãy nhớ rằng cách này yêu cầu tạo một lớp mô hình và định nghĩa hai phương thức bên trong:
.__init__(), nơi bạn khai báo các lớp (layers) sẽ dùng;forward(), nơi bạn định nghĩa điều gì xảy ra với đầu vào của mô hình khi nhận được chúng; đây là nơi bạn truyền đầu vào qua các lớp đã định nghĩa trước.
Hãy xây dựng một mô hình với ba lớp tuyến tính (linear) và các kích hoạt ReLU. Sau lớp tuyến tính cuối cùng, bạn cần dùng kích hoạt sigmoid, vốn rất phù hợp cho các bài toán phân loại nhị phân như dự đoán khả năng nước uống được của chúng ta. Dưới đây là mô hình được định nghĩa bằng nn.Sequential(), có thể bạn đã quen thuộc hơn:
net = nn.Sequential(
nn.Linear(9, 16),
nn.ReLU(),
nn.Linear(16, 8),
nn.ReLU(),
nn.Linear(8, 1),
nn.Sigmoid(),
)
Giờ hãy viết lại mô hình này dưới dạng một lớp!
Bài tập này là một phần của khóa học
Deep Learning nâng cao với PyTorch
Hướng dẫn bài tập
- Trong phương thức
.__init__(), định nghĩa ba lớp tuyến tính với kích thước tương ứng với phần mô tả mô hình đã cho và gán lần lượt choself.fc1,self.fc2, vàself.fc3. - Trong phương thức
forward(), truyền đầu vào mô hìnhxqua tất cả các lớp, nhớ thêm các hàm kích hoạt cho chúng, tương tự như cách đã làm cho lớp đầu tiên.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
import torch.nn as nn
import torch.nn.functional as F
class Net(nn.Module):
def __init__(self):
super().__init__()
# Define the three linear layers
self.fc1 = ____
self.fc2 = ____
self.fc3 = ____
def forward(self, x):
# Pass x through linear layers adding activations
x = nn.functional.relu(self.fc1(x))
x = ____
x = ____
return x