Chuẩn Hóa Theo Lô 2D (BatchNorm2d) & Thống Kê Chạy
running_mean = (1 - m) · running_mean + m · μ
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: batch-normalization-from-scratch.
Nội dung đề bài
Mục tiêu kiến thức
- Khác với BatchNorm1D tính trên (B, D), BatchNorm2D chuẩn hóa trên không gian ảnh (B, H, W) cho từng kênh C độc lập.
- Khi huấn luyện (
training=True): - Giá trị trung bình của kênh c: μc = 1B · H · W ∑b, h, w x[b, c, h, w].
- Phương sai mẫu có hiệu chỉnh (unbiased): σ2c = 1B · H · W - 1 ∑b, h, w (x[b, c, h, w] - μc)2 (dùng cho cập nhật running stats) hoặc phương sai biased khi chuẩn hóa.
- Chuẩn hóa: x = x - μc√(σ2c + ε), đầu ra y = γc x + βc.
- Cập nhật thống kê chạy:
running_mean = (1 - m) · running_mean + m · μ running_var = (1 - m) · running_var + m · σ2unbiased
- Khi đánh giá (
training=False): Dùng trực tiếprunning_meanvàrunning_var.
Yêu cầu
Xây dựng lớp CustomBatchNorm2d(torch.nn.Module):
class CustomBatchNorm2d(nn.Module):
def __init__(self, num_features: int, eps: float = 1e-5, momentum: float = 0.1):
pass
def forward(self, x: torch.Tensor) -> torch.Tensor:
passInput
- Lớp
CustomBatchNorm2d(num_features,eps,momentum): 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
CustomBatchNorm2d: 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ớ: 256MB.
- 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
torch.manual_seed(42)
B, C, H, W = (4, 3, 8, 8)
x = torch.randn(B, C, H, W, dtype=torch.float64)
custom_bn = CustomBatchNorm2d(num_features=C).to(dtype=torch.float64)
official_bn = nn.BatchNorm2d(num_features=C).to(dtype=torch.float64)
custom_bn.train()
official_bn.train()
out_custom = custom_bn(x)
out_official = official_bn(x)Output
Tensor shape: (4, 3, 8, 8), dtype=torch.float64Giả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
torch.manual_seed(42)
C = 2
custom_bn = CustomBatchNorm2d(num_features=C).to(dtype=torch.float64)
official_bn = nn.BatchNorm2d(num_features=C).to(dtype=torch.float64)
for _ in range(3):
x = torch.randn(2, C, 4, 4, dtype=torch.float64)
custom_bn(x)
official_bn(x)
custom_bn.eval()
official_bn.eval()
test_x = torch.randn(1, C, 4, 4, dtype=torch.float64)
out_c = custom_bn(test_x)
out_o = official_bn(test_x)Output
Tensor shape: (1, 2, 4, 4), dtype=torch.float64Giả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.
