Materi
Dive into Deep Learning §7.2 menjelaskan operasi di dalam lapisan konvolusi: jendela seukuran kernel mulai dari pojok kiri atas masukan dan bergeser ke kanan lalu ke bawah. Di setiap posisi, subarray di bawah jendela dikalikan kernel elemen demi elemen, lalu hasilnya dijumlahkan menjadi satu angka keluaran. Operasi ini sebenarnya cross-correlation; Deep Learning bab 9.1 mencatat bahwa banyak pustaka machine learning menerapkan cross-correlation, yaitu konvolusi tanpa membalik kernel, tetapi tetap menyebutnya konvolusi. Kelas Mengolah Citra dengan Python memakai operasi serupa lewat scipy.ndimage untuk blur dan tepi Sobel; di sini operasinya ditulis sendiri, dan di jaringan sungguhan isi kernelnya dipelajari.
Dengan stride s, jendela untuk keluaran baris i dan kolom j dimulai di baris i·s dan kolom j·s masukan. Padding p menambahkan p baris dan p kolom nol di setiap sisi sebelum jendela digeser; np.pad(X, p) melakukannya, karena mode bawaannya constant dengan nilai 0. Ukuran keluarannya mengikuti rumus dari pelajaran sebelumnya, ⌊(n + 2p − k) / s⌋ + 1.
Pooling (d2l §7.5) menggeser jendela dengan cara yang sama, tetapi tidak punya kernel dan tidak punya parameter: max pooling mengambil nilai terbesar di jendela, average pooling rata-ratanya. Jendela 2 × 2 dengan stride 2 membagi dua tinggi dan lebar peta fitur.
import numpy as np
X = np.arange(16.0).reshape(4, 4)
K = np.array([[0.0, 1], [2, 0]])
i, j, s = 1, 0, 2 # keluaran baris 1, kolom 0, stride 2
jendela = X[i * s:i * s + 2, j * s:j * s + 2] # baris 2–3, kolom 0–1
print(jendela, (jendela * K).sum()) # [[ 8. 9.] [12. 13.]] 33.0
print(np.pad(np.ones((2, 2)), 1).shape) # (4, 4)