Cài Đặt Tích Chập 2D Không Gian (Spatial Conv2D) Từ Gốc Bằng NumPy
Cho đầu vào X ∈ RB × Cin × H × W và bộ lọc W ∈ RCout × Cin × KH × KW.
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: linear-layer-and-mlp-foundations.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu cấu trúc toán học của phép tích chập ảnh 2 chiều (Cross-Correlation trong Deep Learning):
Cho đầu vào X ∈ RB × Cin × H × W và bộ lọc W ∈ RCout × Cin × KH × KW.
- Kích thước không gian đầu ra:
Hout = ⌊ H + 2P - KHS ⌋ + 1, Wout = ⌊ W + 2P - KWS ⌋ + 1 Trong đó P là padding và S là stride.
- Với mỗi batch b và kênh đầu ra cout:
Y[b, cout, i, j] = bias[cout] + ∑cin=0Cin-1 ∑kh=0KH-1 ∑kw=0KW-1 Xpad[b, cin, i · S + kh, j · S + kw] · W[cout, cin, kh, kw]
Yêu cầu
Viết hàm:
def conv2d_forward(
x: np.ndarray,
weight: np.ndarray,
bias: np.ndarray | None = None,
stride: int = 1,
padding: int = 0
) -> np.ndarray:
passx: Mảng 4D shape(B, C_in, H, W).weight: Mảng 4D shape(C_out, C_in, K_H, K_W).bias: Mảng 1D shape(C_out,)hoặcNone.- Trả về: Mảng 4D shape
(B, C_out, H_out, W_out)float64.
Input
- Hàm
conv2d_forward(x,weight,bias,stride,padding): Các tham số đầu vào chứa dữ liệu Tensor/mảng NumPy hoặc giá trị siêu tham số tương ứng.
Output
- Hàm
conv2d_forward: Trả về kết quả kiểunp.ndarraytheo đúng đặc tả kỹ thuật và kích thước quy định.
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
np.random.seed(42)
B, C_in, H, W = (2, 3, 5, 5)
C_out, K = (4, 3)
x = np.random.randn(B, C_in, H, W)
w = np.random.randn(C_out, C_in, K, K)
b = np.random.randn(C_out)
out = conv2d_forward(x, w, bias=b, stride=1, padding=1)
x_t = torch.tensor(x, dtype=torch.float64)
w_t = torch.tensor(w, dtype=torch.float64)
b_t = torch.tensor(b, dtype=torch.float64)Output
[ 0.4438, 0.7746, -0.9269, -0.0595]Giả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
x = np.random.randn(1, 2, 7, 7)
w = np.random.randn(3, 2, 3, 3)
out = conv2d_forward(x, w, stride=2, padding=2)
x_t = torch.tensor(x, dtype=torch.float64)
w_t = torch.tensor(w, dtype=torch.float64)Output
Tensor shape: (3, 2, 3, 3), 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.
