Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

Büyükler için · görselleştirici + gerçek PyTorch kodu + Colab defteriBitirme

Bitirme projesi: el yazısı rakam tanıyan CNN

MNIST'te küçük bir evrişimli ağ eğit, ölç, hatalarını incele, dışa aktar ve tarayıcıda kendi çizdiğin rakamlarla dene. Colab defteri ve tarayıcıdaki tanıyıcı aynı mimariyi kullanır.

El yazısı rakam tanıyıcı (CNN, tarayıcıda)

Kutucuğa bir rakam çiz. Çizim MNIST gibi hazırlanır (kırp, 20×20'ye sığdır, kütle merkezine göre 28×28'e ortala), CNN tarayıcıda çalışır ve on olasılığı verir. Kendi Colab defterinden indirdiğin ağırlık dosyasını yükleyip onu da deneyebilirsin.

Senaryo

Bir okul, öğrencilerin tablete yazdığı tek haneli cevapları otomatik okumak istiyor. Model telefonda ve tarayıcıda, internete görüntü göndermeden çalışmalı. Sen modeli eğitir, sınırlarını ölçer, dağıtıma hazırlar ve bir demo sayfasında gösterirsin.

Gereksinimler (test edilebilir)

  • G1: MNIST test kümesinde doğruluk en az %98.
  • G2: Model 50 000 parametreden küçük; fp32 ağırlık dosyası 200 KB'den küçük.
  • G3: Karışıklık matrisi ve en çok karıştırılan üç sınıf çifti raporlanır; her biri için 5 yanlış örnek gösterilir.
  • G4: Eğitim tekrarlanabilir: aynı tohumla iki çalıştırmada test doğruluğu ±%0,1 içinde.
  • G5: Ağırlıklar JSON (tarayıcı) ve ONNX olarak dışa aktarılır; tarayıcıdaki tanıyıcıya yüklenince aynı 200 test örneğinde PyTorch ile aynı tahminleri verir.
  • G6: Kendi çizdiğin 30 rakamlık bir küme (her rakamdan 3) toplanır ve doğruluğu ayrıca raporlanır (dağılım kayması).

Mimari

  • Veri: torchvision.datasets.MNIST, eğitimden %10 doğrulama ayrımı (sabit tohum), Normalize(0,1307, 0,3081) (5. ve 6. üniteler).
  • Model: Conv2d(1,8,3,p=1) → ReLU → MaxPool → Conv2d(8,16,3,p=1) → ReLU → MaxPool → Linear(784,10); isteğe bağlı Dropout (3., 7. ve 8. üniteler).
  • Eğitim: Adam lr = 1e-3, 4–8 tur, erken durdurma ve en iyi checkpoint (4. ve 5. üniteler).
  • Değerlendirme: doğruluk, karışıklık matrisi, yanlış örnek galerisi, öznitelik haritaları (7. ünite).
  • Dağıtım: state_dict, JSON ve ONNX; int8 nicemleme denemesi ve ölçümü (10. ünite).
  • Demo: bu sayfadaki tarayıcı tanıyıcı (kendi ağırlık JSON'unla) ya da onnxruntime-web ile kendi sayfan.

Test planı

  • Birim: model rastgele (4, 1, 28, 28) girdide (4, 10) çıkış verir; parametre sayısı beklenen değerde.
  • Birim: tek bir küçük yığını (32 örnek) 200 adımda ezberleyebilir (kayıp < 0,01): döngüde hata yok.
  • Birim: Dataset ve DataLoader şekil ve tip testleri; doğrulama ayrımı tohumla aynı.
  • Tutarlılık: PyTorch ve tarayıcı (JSON) tahminleri 200 test örneğinde aynı (G5).
  • Kabul: G1–G6 ölçütlerini hesaplayan son defter hücresi ve sonuç tablosu.
  • Gürbüzlük: ±2 piksel kaydırılmış ve hafif döndürülmüş test görüntülerinde doğruluk.

Demo ve sunum

  • Canlı demo: tarayıcıda rakam çiz; olasılıklar ve öznitelik haritaları.
  • Karışıklık matrisinden bir hata türünü seç ve neden olduğunu örneklerle açıkla.
  • Nicemleme öncesi/sonrası: boyut, doğruluk, süre.
  • Kendi çizimlerindeki doğruluk ile MNIST doğruluğu arasındaki farkı ve nedenini (veri dağılımı) tartış.

Başlangıç kodu

Python: rakam tanıyıcıyı eğit, değerlendir ve dışa aktar
import json
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

tf = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))])
tr = datasets.MNIST('veri', train=True, download=True, transform=tf)
te = datasets.MNIST('veri', train=False, download=True, transform=tf)
tr_dl = DataLoader(tr, batch_size=64, shuffle=True)
te_dl = DataLoader(te, batch_size=1000)

device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = KucukCNN().to(device)                            # 7. ünitedeki sınıf
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
for epoch in range(4):
    model.train()
    for xb, yb in tr_dl:
        xb, yb = xb.to(device), yb.to(device)
        opt.zero_grad()
        nn.functional.cross_entropy(model(xb), yb).backward()
        opt.step()
    model.eval(); dogru = 0
    with torch.no_grad():
        for xb, yb in te_dl:
            dogru += (model(xb.to(device)).argmax(1).cpu() == yb).sum().item()
    print(f'epoch {epoch + 1}: test doğruluğu {dogru / len(te):.4f}')   # ≈ 0,985

# tarayıcıdaki tanıyıcıya yüklenecek JSON
r = lambda t: [round(v, 6) for v in t.detach().cpu().flatten().tolist()]
sd = model.state_dict()
json.dump({'mean': 0.1307, 'std': 0.3081,
           'conv1': {'w': r(sd['conv1.weight']), 'b': r(sd['conv1.bias'])},
           'conv2': {'w': r(sd['conv2.weight']), 'b': r(sd['conv2.bias'])},
           'fc': {'w': r(sd['fc.weight']), 'b': r(sd['fc.bias'])}}, open('agirliklar.json', 'w'))

Colab defteri

PyTorch tarayıcıda çalışmaz; gerçek kodu Google Colab'da (ücretsiz GPU ile) çalıştır. Defteri indir, colab.research.google.com adresinde "Dosya → Not defteri yükle" ile aç, "Çalışma zamanı → Çalışma zamanı türünü değiştir → T4 GPU" seç ve hücreleri sırayla çalıştır.

Defteri indir (.ipynb)

Teslimler

  1. 3. üniteden sonra
    Öneri ve model taslağı

    Kapsam, gereksinimler (G1–G6), model sınıfı ve şekil testi.

    nn.Module: katmanlar, parametreler ve model yazmak
  2. 6. üniteden sonra
    Veri hattı ve ilk eğitim

    Dataset/DataLoader, doğrulama ayrımı, ilk eğitim eğrileri ve tek yığın ezberleme testi.

    Dataset ve DataLoader: veriyi yığınlar hâlinde beslemek
  3. 8. üniteden sonra
    Değerlendirme ve iyileştirme

    G1 ve G4; karışıklık matrisi, yanlış örnekler, düzenlileştirme ablasyonu.

    Aşırı öğrenme ve düzenlileştirme
  4. 10. üniteden sonra
    Dağıtım ve demo

    JSON ve ONNX dışa aktarma, tarayıcıda tutarlılık testi (G5), nicemleme ölçümü, kendi çizim kümen (G6), 5 dakikalık demo ve kısa rapor.

    Aktarım öğrenmesi ve dağıtım
Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç