Zapoznaj się z naszymimateriałami na stronie
Potrzebne materiały:
- Co najmniej 1 robot lub symulacja w oprogramowaniu
- 1 komputer/robot
- Przynajmniej niewielka arena
Konfiguracja oprogramowania:
- przykładowa konfiguracja: edycja ręczna: „zablokowane vs ruch”
Czas trwania:
2–3 godziny
Wiek:
+ 15 lat
Zalety tej aktywności:
- Można to wykonać (częściowo) za pomocą symulatora.
Programowanie funkcji nagrody, jaką otrzymuje robot za wykonanie oryginalnego zadania: podążanie za linią za pomocą kamery… lub coś innego!
Programowanie sieci neuronowej
Na początku pracuj z symulowanym robotem – będzie to łatwiejsze, a na koniec będziesz mógł wrócić do prawdziwych robotów. Wyłącz robota, aby oszczędzać baterie.
W zakładce „AI” wybierz algorytm: „kod ucznia”, a następnie na zadane pytanie odpowiedz „Nowy” i wybierz nazwę pliku, w którym chcesz zapisać swój kod.
Zmodyfikujcie kod trzech funkcji: „init”, „learn” i „take_decision”, aby stworzyć własną sieć neuronową.
Zrozumienie trzech funkcji
- Dodajcie wydruki w każdej z trzech funkcji i zauważcie, że
- Funkcja `init` jest wywoływana po naciśnięciu przycisku „Zresetuj AI”
- Funkcja learn jest wywoływana tak często, jak to możliwe (ale tylko wtedy, gdy przycisk „Uczenie się” jest włączony i w pamięci doświadczeń znajdują się dane do nauki)
- Funkcja `take_decision` jest wywoływana za każdym razem, gdy program chce podjąć decyzję (w rzeczywistości jest wywoływana dwa razy na każdym etapie: raz w celu wyświetlenia wartości na ekranie, a raz w celu podjęcia decyzji przez robota)
- Zmień wartość zwracaną przez funkcję take_decision: określa ona działanie, jakie wybiera robot w trybie autonomicznym
Napisać kod pierwszej sieci „poza” oprogramowaniem
Oto kod, który tworzy sieć neuronową z 1 wejściem, 2 wyjściami (odpowiadającymi 2 kategoriom) oraz warstwą pośrednią składającą się ze 100 neuronów.
Przeprowadza go przez zestaw trzech danych (x=-2 🡪 kategoria 1), (x=0 🡪 kategoria 0), (x=2 🡪 kategoria 1) i sprawdza, czy po zakończeniu uczenia się błąd jest niewielki.
import torch jako th
import nn z modułu torch
import numpy jako np
ninput = 1
noutput = 2
# Przykładowy zbiór danych
data = [[-2], [0], [2]]
klasy = [1, 0, 1]
data = th.Tensor(data)
klasy = th.LongTensor(klasy)
# Inicjowanie sieci neuronowej
sieć = nn.Sequential(
nn.Linear(ninput, 100),
nn.LeakyReLU(),
nn.Linear(100, noutput),
)
print("pierwsza warstwa: wagi = ", network[0].weight)
print("pierwsza warstwa: bias = ", network[0].bias)
# Sprawdź dane wyjściowe sieci przed rozpoczęciem uczenia
sensors = th.Tensor([[0], [1], [2]])
output = sieć(czujniki)
print(wynik)
# Funkcja straty początkowej
lossfn = nn.CrossEntropyLoss()
pred = sieć(dane)
print("strata:", lossfn(pred, classes))
# Optymalizator inicjalizacji
optimizer = th.optim.SGD(network.parameters(), lr=1e-1)
# Nauka
nrepeat = 2000
for i in range(nrepeat):
optimizer.zero_grad()
pred = sieć(dane)
loss = lossfn(pred, classes)
print("loss:", lossfn(pred, classes))
loss.backward() # oblicza to gradient, czyli pochodne
optimizer.step()
# Sprawdź dane wyjściowe sieci po zakończeniu uczenia
pred = sieć(dane)
print("Strata po", nrepeat, "krokach uczenia się:", lossfn(pred, classes))
print("pierwsza warstwa: wagi = ", network[0].weight)
print("pierwsza warstwa: bias = ", network[0].bias)
- Wpisz poniższy kod na końcu pliku w języku Python i przetestuj go, klikając przycisk „Zresetuj AI” (wyniki poleceń ` print` będą widoczne w konsoli).
- Teraz należy zrealizować trzy funkcje: init, learn i take_decision:
Na początku pliku zdefiniuj następujące zmienne, które będą dostępne w poszczególnych funkcjach
sieć = funkcja straty = optymalizator = None
W ramach każdej z tych trzech funkcji udostępnij te zmienne za pomocą następującego wiersza:
sieć globalna, lossfn, optymalizator
Przenieś sekcję „inicjalizacja sieci” do funkcji init
Przenieś część dotyczącą „uczenia się” do funkcji learn (ale usuń pętlę for: umieść tylko jeden etap uczenia się, pamiętając, że funkcja ta będzie wywoływana wiele razy)
Napisz funkcję `take_decision`, która powinna zwracać numer kategorii odpowiadający wpisowi „sensors”, czyli 0 lub 1
- Przetestuj swój program w oprogramowaniu, najpierw na symulowanym robocie, a potem na prawdziwym robocie!
Podsumowanie i wnioski
Mamy nadzieję, że to spotkanie pomogło wam na nowo odkryć sieci neuronowe w praktyce!!
W programowaniu lista funkcji dostępnych w programie nazywa się API, co oznacza Application Programming Interface(interfejs programowania aplikacji). Programiści korzystają z niej, aby dowiedzieć się, w jaki sposób można współpracować z programem. API modułu python alphai można znaleźć pod tym linkiem: https://drive.google.com/file/d/1C4ovPW_eH5KFz5Y9JvSrzLhtmdOpcp6-/view