Lompat ke konten utama
←

Jaringan Saraf Tiruan Dasar dengan Python

Pelajaran 20 dari 22

CNN, RNN, dan embedding dengan numpy

Konvolusi 2D, padding, stride, dan pooling dengan numpy

Setelah pelajaran ini kamu bisa menulis operasi konvolusi 2D dengan padding dan stride serta max pooling dan average pooling dengan numpy, dan menghitung satu nilai keluarannya dengan tangan.

±14 menitDiperiksa 28 Sep 2026

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)

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Masukan 4 × 4: baris 1 = [3, 1, 2, 0], baris 2 = [1, 4, 0, 2], baris 3 = [2, 0, 1, 3], baris 4 = [0, 2, 3, 1]. Kernel 2 × 2: [[1, 2], [0, −1]]. Dengan padding 1 dan stride 2, berapa nilai keluaran di baris ke-2, kolom ke-2 (dihitung mulai dari 1)?

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke