Materi section sebelumnya telah membahas komponen pembangun model satu per satu: arsitektur, training loop, evaluasi, hingga penyimpanan checkpoint. Proyek pertama ini merangkai seluruh komponen tersebut menjadi satu alur kerja utuh — dari memeriksa dataset, membangun model nn.Module, melatih dengan training loop, sampai membaca confusion matrix hasil uji. Targetnya konkret: sebuah program yang mengenali digit 0-9 dari gambar tulisan tangan 8x8 dengan akurasi di atas 95 persen pada data uji.

Seluruh kode berjalan di CPU dengan dataset digits dari scikit-learn (1.797 gambar, tanpa unduhan), seeded penuh, dan selesai dalam hitungan detik — sehingga Anda bisa mengulang setiap langkah tanpa biaya komputasi besar.

Prasyarat #

Sebelum masuk ke pengerjaan, pastikan materi berikut sudah dikuasai:

Perilaku Akhir yang Dituju #

Program akhir terdiri atas dua skrip: src/latih.py melatih model lalu menyimpan checkpoint, sedangkan src/prediksi.py memuat checkpoint dan memprediksi sampel data uji. Setelah pelatihan selesai (sekitar 8 detik pada CPU, 15 epoch), sesi inferensi berjalan sebagai berikut:

bash
python3 src/latih.py
python3 src/prediksi.py

Output yang Dihasilkan (keluaran prediksi.py; keluaran lengkap latih.py dibahas pada Bagian 3 dan Bagian 4):

text
checkpoint : /tmp/model_digit.pt
sampel     : 5 gambar pertama data uji

sampel # 0 | label 1 | prediksi 1 | keyakinan 0.895 | BENAR
sampel # 1 | label 0 | prediksi 0 | keyakinan 1.000 | BENAR
sampel # 2 | label 9 | prediksi 9 | keyakinan 1.000 | BENAR
sampel # 3 | label 1 | prediksi 1 | keyakinan 0.999 | BENAR
sampel # 4 | label 5 | prediksi 5 | keyakinan 0.998 | BENAR

Model hasil pelatihan mencapai akurasi uji 0.9733 (438 dari 450 gambar). Skrip latih.py menerima dua argumen opsional — berkas keluaran checkpoint dan jumlah epoch — sehingga Anda bisa bereksperimen tanpa mengubah kode.

Struktur Berkas #

text
klasifikasi-digit-tulisan-tangan/
├── _index.md
├── bagian/                      # empat tahap pengerjaan
│   ├── memahami-dataset/
│   ├── membangun-neural-network/
│   ├── melatih-model/
│   └── mengevaluasi-model/
├── data/
│   └── README.md                # asal-usul dataset digits
├── src/
│   ├── model.py                 # class MLPDigit
│   ├── latih.py                 # pipeline pelatihan + checkpoint
│   ├── prediksi.py              # inferensi dari checkpoint
│   └── __init__.py
├── tests/
│   ├── test_model.py            # uji bentuk dan jumlah parameter
│   └── test_pipeline.py         # uji end-to-end 1 epoch
└── laporan/
    └── LAPORAN.md               # template laporan proyek

Seluruh berkas pada src/, tests/, dan data/ dapat diunduh dari bagian Berkas Sumber di bawah halaman ini dan setiap bagian pengerjaan.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan, dan setiap bagian menghasilkan kode yang benar-benar dapat dijalankan:

  1. Bagian 1 — Memahami Dataset: memeriksa isi dataset digits, keseimbangan kelas, dan rentang nilai piksel.
  2. Bagian 2 — Membangun Neural Network: merancang MLPDigit serta mengujinya sebelum dilatih.
  3. Bagian 3 — Melatih Model: menyusun standardisasi, DataLoader, training loop, dan checkpoint.
  4. Bagian 4 — Mengevaluasi Model: membaca akurasi, confusion matrix, dan inferensi sampel nyata.

Mulailah dari Bagian 1 karena setiap tahap dibangun di atas keputusan tahap sebelumnya — misalnya keputusan standardisasi pada Bagian 1 baru terasa dampaknya pada hasil evaluasi di Bagian 4.