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.
import numpy as nppwm, speed = np.genfromtxt('motor-pwm.csv', delimiter=',', skip_header=1, unpack=True) # 40 ölçüm: PWM, cm/sx = (pwm - pwm.mean()) / pwm.std() # ölçeklew, b, lr = 0.0, 0.0, 0.1 # yatay çizgiyle başlaval = np.arange(len(x)) % 4 == 3 # her 4. ölçüm doğrulamaya ayrılırhistory = {'epoch': [], 'loss': [], 'val_loss': [], 'grad_norm': []} # eğitim geçmişifor epoch in range(60):pred = w * x + b # tahminerr = pred - speed # hataloss = (err[~val] ** 2).mean() # eğitim kümesinde ortalama kare hatagw, gb = 2 * (err[~val] * x[~val]).mean(), 2 * err[~val].mean() # kaybın w ve b'ye göre eğimifor k, v in zip(history, (epoch, loss, (err[val] ** 2).mean(), np.hypot(gw, gb))): history[k].append(float(v))w -= lr * gw # eğime karşı adımb -= lr * gbprint(w / pwm.std(), b - w * pwm.mean() / pwm.std()) # cm/s başına PWM, kesişimres = speed[val] - (w * x[val] + b) # doğrulama artıklarır2 = 1 - (res ** 2).sum() / ((speed[val] - speed[val].mean()) ** 2).sum()for k, v in [('loss', history['loss'][-1]), ('val_loss', history['val_loss'][-1]), ('val_r2', r2)]: # son ölçümler tablosuprint(f'{k:<10}{v:>10.4f}')import csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # geçmişi CSV'ye yazcsv.writer(f).writerows([list(history), *zip(*history.values())]) # satır başına bir dönemtry:import matplotlib.pyplot as plt # varsa grafik çizfor k in ('loss', 'val_loss'): plt.plot(history['epoch'], history[k], label=k)plt.xlabel('epoch'); plt.ylabel('MSE'); plt.yscale('log'); plt.legend(); plt.show()except ImportError: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.
Veri seti
Tüm veri setleri →- Motor PWM ve tekerlek hızıVeri setini indir
- Ev fiyatlarıalıştırmaVeri setini indir
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.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- PWM'i ölçekleriz (ortalaması 0, standart sapması 1): adımlar her yönde aynı büyüklükte olur.
- Çizgi yatay başlar (w = 0, b = 0). Her dönemde tahmin, hata ve ortalama kare hata (kayıp) hesaplanır.
- 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.
- Öğ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 →