Tích chập 2D (padding valid)

Trung bình

AICNNthị giác máy tính4 test · 12 giây · sai số 1e-5

Cài đặt phép tích chập 2D như trong mạng CNN (thực chất là cross-correlation, không lật kernel), không padding, bước nhảy 1:

out[i, j] = Σ_{u,v} img[i+u, j+v] · kernel[u, v]

Kết quả có shape (H − kh + 1, W − kw + 1).

Viết hàm

conv2d(img, kernel)

Tham số

  • img: ảnh xám (H, W)
  • kernel: bộ lọc (kh, kw)

Trả về

Ma trận (H − kh + 1, W − kw + 1).

Ví dụ

Tham số

img = [[0,1,2],[3,4,5],[6,7,8]]
kernel = [[1,0],[0,-1]]

Kết quả

[[-4.0,-4.0],[-4.0,-4.0]]

Mỗi ô = góc trên trái − góc dưới phải = −4

Tham số

img = [[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1]]
kernel = [[1,1,1],[1,1,1],[1,1,1]]

Kết quả

[[9.0,9.0],[9.0,9.0]]

Bài tiếp theo: Max pooling 2D →

Python · NumPy

Bấm “Chạy thử” để gọi conv2d() với 2 ví dụ trong đề và so sánh kết quả. Dùng print() thoải mái để gỡ lỗi.