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

Bölüm 1 · Temeller · Ders 1

Doğrusal regresyon ve gradyan inişi

Motorun PWM–hız çizgisini adım adım öğrenmek

Veri. Bir robot tekerleğine 40 kez farklı PWM değeri verdik ve tekerleğin hızını ölçtük. Robotun belli bir hızda gitmesi için hangi PWM'i vermesi gerektiğini bilmek istiyoruz: ölçümlerden geçen en iyi doğruyu arıyoruz.

ölçümler40 ölçüm · öğrenme oranı 0,10
1 / 70
regresyon.pypython
  1. import numpy as np
  2. pwm, speed = np.genfromtxt('motor-pwm.csv', delimiter=',', skip_header=1, unpack=True) # 40 ölçüm: PWM, cm/s
  3. x = (pwm - pwm.mean()) / pwm.std() # ölçekle
  4. w, b, lr = 0.0, 0.0, 0.1 # yatay çizgiyle başla
  5. val = np.arange(len(x)) % 4 == 3 # her 4. ölçüm doğrulamaya ayrılır
  6. history = {'epoch': [], 'loss': [], 'val_loss': [], 'grad_norm': []} # eğitim geçmişi
  7. for epoch in range(60):
  8. pred = w * x + b # tahmin
  9. err = pred - speed # hata
  10. loss = (err[~val] ** 2).mean() # eğitim kümesinde ortalama kare hata
  11. gw, gb = 2 * (err[~val] * x[~val]).mean(), 2 * err[~val].mean() # kaybın w ve b'ye göre eğimi
  12. for k, v in zip(history, (epoch, loss, (err[val] ** 2).mean(), np.hypot(gw, gb))): history[k].append(float(v))
  13. w -= lr * gw # eğime karşı adım
  14. b -= lr * gb
  15. print(w / pwm.std(), b - w * pwm.mean() / pwm.std()) # cm/s başına PWM, kesişim
  16. res = speed[val] - (w * x[val] + b) # doğrulama artıkları
  17. r2 = 1 - (res ** 2).sum() / ((speed[val] - speed[val].mean()) ** 2).sum()
  18. for k, v in [('loss', history['loss'][-1]), ('val_loss', history['val_loss'][-1]), ('val_r2', r2)]: # son ölçümler tablosu
  19. print(f'{k:<10}{v:>10.4f}')
  20. import csv
  21. with open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yaz
  22. csv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir dönem
  23. try:
  24. import matplotlib.pyplot as plt # varsa grafik çiz
  25. for k in ('loss', 'val_loss'): plt.plot(history['epoch'], history[k], label=k)
  26. plt.xlabel('epoch'); plt.ylabel('MSE'); plt.yscale('log'); plt.legend(); plt.show()
  27. except ImportError:
  28. 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.

regresyon.pypython

Çıktı

Çıktı burada görünecek.

Nasıl çalışır

  1. PWM'i ölçekleriz (ortalaması 0, standart sapması 1): adımlar her yönde aynı büyüklükte olur.
  2. Çizgi yatay başlar (w = 0, b = 0). Her dönemde tahmin, hata ve ortalama kare hata (kayıp) hesaplanır.
  3. Kaybın w ve b'ye göre türevi, kaybın hangi yönde arttığını söyler; ters yönde, öğrenme oranı kadar adım atılır.
  4. Öğrenme oranını 1'e yaklaştır: çizgi salınır. 1'i geçince ıraksar ve kayıp patlar. Tersine 0,01'e indir: adımlar o kadar küçüktür ki son dönemde eğim hâlâ 0,150'dedir (doğrusu 0,213); model doğru yöne gider ama zamanı yetmez.

Neden önemli

Gradyan inişi, bugünkü bütün sinir ağlarını eğiten yöntemin ta kendisidir: milyarlarca ağırlık için de aynı iki satır çalışır. Robotikte sensör ve motor kalibrasyonu, ileri besleme (feedforward) terimi ve basit tahmin modelleri hep bu doğruyla başlar.

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ç