Khởi tạo và hàm kích hoạt
Các vấn đề về gradient không ổn định (tiêu biến hoặc bùng nổ) thường xuất hiện khi huấn luyện mạng nơ-ron sâu. Trong bài này và các bài tiếp theo, bạn sẽ mở rộng kiến trúc mô hình đã xây dựng cho bài toán phân loại nước uống được để mô hình ít bị ảnh hưởng bởi các vấn đề đó hơn.
Bước đầu tiên, bạn sẽ cải thiện việc khởi tạo trọng số bằng chiến lược khởi tạo He (Kaiming). Để làm vậy, bạn cần gọi bộ khởi tạo phù hợp từ mô-đun torch.nn.init, đã được nhập sẵn là init. Tiếp theo, bạn sẽ cập nhật các hàm kích hoạt từ ReLU mặc định sang ELU, vốn thường cho kết quả tốt hơn.
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
- Gọi bộ khởi tạo He (Kaiming) trên thuộc tính trọng số của tầng thứ hai,
fc2, tương tự như cách đã làm chofc1. - Gọi bộ khởi tạo He (Kaiming) trên thuộc tính trọng số của tầng thứ ba,
fc3, đồng thời xét đến hàm kích hoạt khác được dùng ở tầng cuối. - Cập nhật các hàm kích hoạt trong phương thức
forward()từrelusangelu.
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.
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)
# Apply He initialization
init.kaiming_uniform_(self.fc1.weight)
____(____)
____(____, ____)
def forward(self, x):
# Update ReLU activation to ELU
x = nn.functional.relu(self.fc1(x))
x = nn.functional.relu(self.fc2(x))
x = nn.functional.sigmoid(self.fc3(x))
return x