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:
- Multilayer Perceptron — konsep arsitektur berlapis yang kita pakai.
- Membangun Model dengan nn.Module — pola class model PyTorch.
- Dataset dan DataLoader — cara memberi batch data ke training loop.
- Training Loop
— cetakan
zero_gradhinggastep()yang dipakai ulang di sini.
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:
python3 src/latih.py
python3 src/prediksi.pyOutput yang Dihasilkan (keluaran prediksi.py; keluaran lengkap latih.py dibahas pada Bagian 3 dan Bagian 4):
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 | BENARModel 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 #
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 proyekSeluruh 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:
- Bagian 1 — Memahami Dataset: memeriksa isi dataset digits, keseimbangan kelas, dan rentang nilai piksel.
- Bagian 2 — Membangun Neural Network: merancang
MLPDigitserta mengujinya sebelum dilatih. - Bagian 3 — Melatih Model: menyusun standardisasi, DataLoader, training loop, dan checkpoint.
- 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.
Periksa isi dataset digits: jumlah sampel, keseimbangan kelas, dan rentang nilai piksel sebelum merancang model.
Buka → # Bagian 2: Membangun Neural NetworkRancang class MLPDigit dengan nn.Module, pahami peran tiap layer, dan uji bentuk keluaran sebelum model dilatih.
Buka → # Bagian 3: Melatih ModelSusun pipeline pelatihan lengkap: pembagian data stratified, standardisasi, DataLoader, training loop, dan penyimpanan checkpoint.
Buka → # Bagian 4: Mengevaluasi ModelBaca hasil evaluasi nyata: akurasi uji, confusion matrix, pasangan digit yang tertukar, dan inferensi pada sampel individual.
Buka → # Buka → # Buka →