Data: Strategi “Pretrained” Tanpa Unduhan

Proyek transfer learning biasanya memakai model pretrained besar (ResNet, EfficientNet) yang bobotnya diunduh dari internet. Proyek ini memilih jalur yang dapat diuji penuh di CPU tanpa unduhan: model “pretrained” dibuat sendiri dari dataset digits scikit-learn, mengikuti pola chapter Transfer Learning untuk Gambar.

Pembagian tugas #

TugasKelasJumlah sampelPeran
Adigit 0-4901melatih backbone (sumber “pretrained”)
Bdigit 5-9 (direlabel 0-4)896target transfer: hanya 30 sampel latih
  • Tugas A memakai 80/20 latih-uji; head tugas A dibuang setelah pelatihan — hanya bobot backbone konvolusi (4800 parameter) yang disimpan ke /tmp/backbone_digit.pt oleh src/pretrained.py.
  • Tugas B diambil dengan np.random.default_rng(42) sehingga transfer.py, dari_nol.py, dan bandingkan.py selalu melihat 30 sampel latih dan 200 sampel uji yang sama.
  • Statistik normalisasi (mean/deviasi) dihitung dari tugas A — meniru praktik memakai statistik dataset asal model pretrained.
  • Citra 8x8 diperbesar ke 16x16 (interpolasi bilinear) agar dua blok max-pooling punya ruang resolusi.

Mengapa bukan model pretrained nyata #

Model seperti torchvision.models.resnet18(weights=...) berukuran puluhan megabyte dan dirancang untuk masukan 224x224 tiga kanal; melatih head-nya saja bisa melebihi satu menit di CPU. Alur kerjanya persis sama dengan proyek ini — muat bobot, bekukan backbone, ganti head, latih head — hanya sumber bobotnya yang berbeda. Rujukan resmi: torchvision models .

Menjalankan ulang #

bash
python3 src/pretrained.py     # latih backbone tugas A -> /tmp/backbone_digit.pt
python3 src/transfer.py       # muat backbone, bekukan, latih head tugas B

Berkas /tmp/backbone_digit.pt dibuat ulang secara otomatis oleh transfer.py bila belum ada.