Khối ResNet Cơ Bản với Đường Tắt Skip Connection
Thay vì học ánh xạ trực tiếp H(x), mạng học ánh xạ thặng dư (residual mapping) F(x) = H(x) - x. Đầu ra khối là:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: spatial-convolution-2d-from-scratch, batch-norm-2d-training-and-running-stats.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu kiến trúc đột phá của Deep Residual Learning (He et al., CVPR 2016):
Thay vì học ánh xạ trực tiếp H(x), mạng học ánh xạ thặng dư (residual mapping) F(x) = H(x) - x. Đầu ra khối là: y = ReLU(F(x) + shortcut(x))
- Nhánh chính F(x):
Conv2D(in_channels, out_channels, kernel=3, stride=stride, padding=1, bias=False)BatchNorm2D(out_channels)ReLU()Conv2D(out_channels, out_channels, kernel=3, stride=1, padding=1, bias=False)BatchNorm2D(out_channels)- Nhánh đường tắt shortcut(x):
- Nếu
stride != 1hoặcin_channels != out_channels: Dùng phép chiếunn.Sequential(Conv2D(in_channels, out_channels, kernel=1, stride=stride, bias=False), BatchNorm2D(out_channels)). - Ngược lại: Đồng nhất (Identity mapping) shortcut(x) = x.
- Lưu ý then chốt: Phép cộng thặng dư thực hiện TRƯỚC hàm kích hoạt ReLU cuối cùng.
Yêu cầu
Xây dựng lớp ResNetBasicBlock(torch.nn.Module):
class ResNetBasicBlock(nn.Module):
def __init__(self, in_channels: int, out_channels: int, stride: int = 1):
pass
def forward(self, x: torch.Tensor) -> torch.Tensor:
passInput
- Lớp
ResNetBasicBlock(in_channels,out_channels,stride): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
ResNetBasicBlock: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 3000ms.
- Giới hạn bộ nhớ: 512MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
block = ResNetBasicBlock(in_channels=16, out_channels=16, stride=1)
x = torch.randn(2, 16, 8, 8)
block(x)Output
Tensor shape: (2, 16, 8, 8), dtype=torch.float32Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
block = ResNetBasicBlock(in_channels=16, out_channels=32, stride=2)
x = torch.randn(2, 16, 8, 8)
block(x)Output
Tensor shape: (2, 32, 4, 4), dtype=torch.float32Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
