Okullar için Robotik ve Mühendislik · anaokulundan liseye

Bölüm 1 · Temeller · Ders 3

Perceptron: ilk yapay nöron

Fren mi devam mı? Hatadan öğrenen tek bir doğru

Veri. Otonom bir araç her an iki şey ölçer: öndeki engele mesafe ve kendi hızı. Uzman sürücünün 80 kararını kaydettik: fren ya da devam. Hızlıysan ve engel yakınsa fren; aradaki sınır bir doğru.

80 karar: fren / devambaşlangıçta sınır yok
1 / 44
perceptron.pypython
  1. import numpy as np
  2. D = np.genfromtxt('surus-fren.csv', delimiter=',', names=True)
  3. X, y = np.c_[D['mesafe'], D['hiz']], 2 * D['fren'] - 1 # [mesafe m, hız m/s], +1 fren, −1 devam
  4. test = np.arange(len(X)) % 4 == 3 # her 4. karar test için ayrılır
  5. w, b = np.zeros(2), 0.0
  6. history, stop = {'epoch': [], 'mistakes': [], 'acc': [], 'test_acc': []}, None # eğitim geçmişi
  7. for epoch in range(20):
  8. mistakes = 0
  9. for x, t in zip(X[~test], y[~test]):
  10. if t * (w @ x + b) <= 0: # yanlış tarafta
  11. w += t * x; b += t # sınırı noktaya doğru çek
  12. mistakes += 1
  13. for k, v in zip(history, (epoch + 1, mistakes, (y[~test] * (X[~test] @ w + b) > 0).mean(), (y[test] * (X[test] @ w + b) > 0).mean())): history[k].append(float(v))
  14. if mistakes == 0 and stop is None: stop = epoch + 1 # hatasız dönem: sınır artık değişmez
  15. print('w =', w, 'b =', b, 'hatasız dönem:', stop)
  16. for k in ('acc', 'test_acc'): # son ölçümler tablosu
  17. print(f'{k:<10}{history[k][-1]:>10.4f}')
  18. import csv
  19. with open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yaz
  20. csv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir dönem
  21. try:
  22. import matplotlib.pyplot as plt # varsa grafik çiz
  23. plt.bar(history['epoch'], history['mistakes']); plt.xlabel('epoch'); plt.ylabel('mistakes'); plt.show()
  24. except ImportError:
  25. print('matplotlib yok: grafik atlandı')

Eğitim paneli

Eğitim çalıştırılıyor…

Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.

Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide

Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.

perceptron.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. Nöron girdileri ağırlıklarla çarpar, toplar ve işaretine bakar: pozitifse fren.
  2. Noktalar sırayla gezilir. Doğru taraftaysa hiçbir şey olmaz.
  3. Yanlış taraftaysa ağırlıklara o nokta eklenir (ya da çıkarılır): sınır noktaya doğru döner ve kayar.
  4. Bir dönem hiç hata olmadan geçerse durulur. Veri bir doğruyla ayrılabiliyorsa bu her zaman olur (perceptron yakınsama teoremi).

Neden önemli

1958'de Frank Rosenblatt'ın perceptronu ilk öğrenen makineydi. Bugünkü sinir ağlarının her nöronu hâlâ aynı şeyi yapar: ağırlıklı toplam ve bir eşik. Tek başına yalnız doğrusal sınır çizebilir; bir sonraki ders bunun nasıl aşıldığını gösteriyor.

ESOF 323, 11. hafta: robotlarda derin öğrenme →
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ç