Phép Tích chập 2D (Conv2D) từ Gốc bằng Thuật toán im2col và GEMM
Hout = ⌊ H + 2P - KhS ⌋ + 1, Wout = ⌊ W + 2P - KwS ⌋ + 1
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: numpy-broadcasting-matrix-norm.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu tại sao các thư viện Deep Learning (cuDNN, PyTorch) không dùng 4 vòng lặp
forlồng nhau để tính Conv2D mà dùngim2col+ GEMM (General Matrix Multiply). - Kích thước không gian đầu ra:
Hout = ⌊ H + 2P - KhS ⌋ + 1, Wout = ⌊ W + 2P - KwS ⌋ + 1
- Thuật toán
im2col:
Trải mỗi vùng đón nhận (receptive field) kích thước Cin × Kh × Kw thành một cột (hoặc hàng) trong ma trận Xcol. Khi đó phép tích chập trở thành phép nhân ma trận đơn giản: Ycol = Wrow · Xcol + b
Yêu cầu
Viết hàm conv2d_forward_im2col(X: np.ndarray, W: np.ndarray, b: np.ndarray | None = None, stride: int = 1, padding: int = 0) -> np.ndarray:
- Đầu vào:
- X: Tensor ảnh (N, Cin, H, W).
- W: Trọng số bộ lọc (Cout, Cin, Kh, Kw).
- b: Vector bias shape (Cout,) hoặc
None. stride: Bước trượt S ≥ 1.padding: Đệm 0 xung quanh ảnh P ≥ 0.- Trả về: Tensor đặc trưng đầu ra shape (N, Cout, Hout, Wout).
Input
- Hàm
conv2d_forward_im2col(X,W,b,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_im2col: 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ớ: 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
np.random.seed(42)
X = np.random.randn(2, 3, 8, 8)
W = np.random.randn(4, 3, 3, 3)
b = np.random.randn(4)
conv2d_forward_im2col(X, W, b, stride=1, padding=1)Output
Array shape: (2, 4, 8, 8), dtype=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
X = np.random.randn(1, 1, 7, 7)
W = np.random.randn(2, 1, 3, 3)
conv2d_forward_im2col(X, W, b=None, stride=2, padding=0)Output
[[[[ 1.2927, -1.3554, 1.3252],
[-2.9567, 1.4936, 0.5111],
[-1.4022, -0.0942, 0.6176]],
[[-0.374 , -2.2922, 2.7878],
[-5.0106, -0.7835, -2.732 ],
[ 2.3041, -2.0901, 0.943 ]]]]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ế.
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.
