Proyek pertama mengenali digit dengan MLP pada vektor piksel yang diratakan; proyek kedua ini mempertahankan struktur spasial gambar dan mengenali tiga kelas hewan lewat convolutional neural network. Tantangan yang ditambahkan bersifat bertahap: gambar dua dimensi sebagai masukan CNN, dataset yang dibangun sendiri, lalu skenario data sedikit yang diselesaikan dengan transfer learning — membekukan ekstraktor ciri dan melatih ulang kepala klasifikasi.
Dataset hewan nyata berukuran puluhan ribu gambar, sehingga proyek ini memakai dataset sintetis 96 gambar 16x16 yang dibangkitkan sendiri dari pola geometris. Seluruh proses berjalan di CPU dalam hitungan detik, seeded penuh, dan hasilnya identik setiap eksekusi.
Prasyarat #
Materi yang perlu dikuasai sebelum mengerjakan proyek ini:
- Pengenalan CNN — mengapa convolution cocok untuk gambar.
- Convolution Layer dan Pooling Layer — dua komponen inti arsitektur kita.
- Transfer Learning untuk Gambar — pola membekukan ekstraktor ciri yang dipraktikkan di Bagian 3.
- Training Loop — cetakan pelatihan yang dipakai ulang.
Perilaku Akhir yang Dituju #
Dataset dibangkitkan sekali, model CNN dilatih dari nol, lalu eksperimen transfer learning membandingkan dua strategi pada data yang sama:
python3 data/generate_data.py
python3 src/latih_cnn.py
python3 src/latih_transfer.py
python3 src/prediksi.pyOutput yang Dihasilkan (bagian akhir latih_transfer.py — perbandingan dua strategi; keluaran lengkapnya dibahas pada Bagian 3 dan Bagian 4):
perbandingan akurasi uji (data sama, 24 gambar):
dari nol (hanya 24 gambar B) : 0.667
transfer (pra-latih A + kepala B): 0.875CNN yang dilatih pada seluruh 72 gambar latih mencapai akurasi uji 0.917, sedangkan pada skenario data sedikit transfer learning unggul 0.875 berbanding 0.667. Skrip latih_cnn.py dan latih_transfer.py menerima argumen opsional (berkas checkpoint dan jumlah epoch) untuk bereksperimen tanpa mengubah kode.
Struktur Berkas #
klasifikasi-gambar-hewan/
├── _index.md
├── bagian/ # empat tahap pengerjaan
│ ├── menyiapkan-dataset-gambar/
│ ├── membangun-model-cnn/
│ ├── transfer-learning/
│ └── evaluasi-dan-prediksi/
├── data/
│ ├── generate_data.py # generator dataset sintetis
│ ├── hewan_sintetis.npz # 96 gambar hasil generator
│ └── README.md # asal data dan cara ganti dataset nyata
├── src/
│ ├── dataset.py # loader + normalisasi + pembagian data
│ ├── model.py # CNNHewan (ciri + kepala)
│ ├── latih_cnn.py # pelatihan dari nol
│ ├── latih_transfer.py # pra-latih -> bekukan -> kepala baru
│ ├── prediksi.py # inferensi dari checkpoint
│ └── __init__.py
├── tests/
│ ├── test_dataset.py # uji bentuk, label, keseimbangan
│ └── test_model.py # uji bentuk, parameter, pembekuan
└── laporan/
└── LAPORAN.md # template laporan proyekSeluruh berkas pada src/, tests/, dan data/ dapat diunduh dari bagian Berkas Sumber di bawah halaman ini dan setiap bagian pengerjaan.
Tahapan Pengerjaan #
Empat bagian berurutan, dan setiap bagian menghasilkan kode yang dapat dijalankan:
- Bagian 1 — Menyiapkan Dataset Gambar: membangkitkan dataset sintetis, memeriksanya secara visual, dan memahami jitter.
- Bagian 2 — Membangun Model CNN: merancang
CNNHewandengan ekstraktor ciri dan kepala terpisah, lalu mengujinya. - Bagian 3 — Transfer Learning: mensimulasikan skenario data sedikit dengan pra-latih, pembekuan, dan kepala baru.
- Bagian 4 — Evaluasi dan Prediksi: membaca hasil akhir kedua model dan menjalankan inferensi pada sampel.
Ikuti urutan bagian karena arsitektur pada Bagian 2 sengaja dirancang agar bisa dibekukan pada Bagian 3 — pemisahan ciri dan kepala adalah keputusan desain yang baru terasa manfaatnya di eksperimen transfer.
Bangkitkan dataset hewan sintetis dari pola geometris, periksa isinya secara visual, dan pahami jitter yang membuat tugas ini menantang.
Buka → # Bagian 2: Membangun Model CNNRancang CNNHewan dengan ekstraktor ciri dan kepala klasifikasi terpisah, pahami alur bentuk tensor, dan uji model sebelum dilatih.
Buka → # Bagian 3: Transfer LearningSimulasikan skenario data sedikit: pra-latih CNN pada domain sumber, bekukan ekstraktor ciri, lalu latih kepala baru pada domain target.
Buka → # Bagian 4: Evaluasi dan PrediksiBaca hasil akhir CNN dari nol beserta akurasinya per kelas, jalankan inferensi pada sampel uji, dan tutup proyek dengan laporan.
Buka → # Buka → # Buka →