Entdecken Sie unsere
Ressourcen
Benötigtes Material :
- Mindestens 1 Roboter oder Simulation in der Software
- 1 Computer/Roboter
- Kleine Arena Minimum
Software-Konfiguration :
- Beispielkonfiguration: Manuelle Bearbeitung: "Blockiert vs. Bewegung".
Dauer :
2 bis 3 Stunden
Alter :
+ 15 Jahre
Die + dieser Aktivität :
- Kann (teilweise) mit dem Simulator durchgeführt werden.
Programmieren Sie die Belohnungsfunktion, die der Roboter erhält, um ein originelles Lernprogramm durchzuführen: Folgen Sie einer Linie mit der Kamera, ... oder etwas anderes!
Programmierung des neuronalen Netzes
Arbeiten Sie anfangs mit dem simulierten Roboter, das ist einfacher, und Sie können am Ende wieder zu den echten Robotern zurückkehren. Schalten Sie den Roboter aus, um seine Batterien zu schonen.
Wählen Sie auf der Registerkarte AI den Algorithmus: "Schülercode", beantworten Sie die gestellte Frage mit "Neu" und wählen Sie den Namen der Datei, in der Ihr Code gespeichert werden soll.
Sie werden den Code von drei Funktionen "init", "learn" und "take_decision" bearbeiten, um Ihr eigenes neuronales Netz zu codieren.
Verständnis der 3 Funktionen
- Fügen Sie print in jede der drei Funktionen ein und stellen Sie fest, dass
- init wird aufgerufen, wenn "KI zurücksetzen" gedrückt wird
- learn wird so oft wie möglich aufgerufen (aber nur, wenn die Schaltfläche "Lernen" aktiviert ist und Lerndaten im Erfahrungsspeicher vorhanden sind)
- take_decision wird jedes Mal aufgerufen, wenn das Programm eine Entscheidung wissen will (es wird tatsächlich 2 Mal pro Schritt aufgerufen: 1 Mal für die Anzeige der Werte auf dem Bildschirm, 1 Mal, um den Roboter die Entscheidung treffen zu lassen.
- Ändern Sie den von der Funktion take_decision zurückgegebenen Wert: Er bestimmt, welche Aktion der Roboter im autonomen Modus wählt
Ein erstes Netzwerk "außerhalb" der Software codieren
Hier ist ein Code, der ein neuronales Netz mit 1 Eingabe, 2 Ausgaben (entsprechend 2 Kategorien) und einer Zwischenschicht von 100 Neuronen aufbaut.
Er trainiert ihn auf einen Satz von 3 Daten (x=-2 🡪 Kategorie 1), (x=0 🡪 Kategorie 0), (x=2 🡪 Kategorie 1) und überprüft, ob der Fehler am Ende des Lernprozesses klein ist.
import torch as th
from torch import nn
import numpy as np
ninput = 1
noutput = 2
# Beispieldatensatz
data = [[-2], [0], [2]]]
Klassen = [1, 0, 1]
data = th.Tensor(data)
Klassen = th.LongTensor(Klassen)
# Init neurales Netzwerk
network = nn.Sequential(
nn.Linear(ninput, 100),
nn.LeakyReLU(),
nn.Linear(100, noutput),
)
print("first layer: weights = ", network[0].weight)
print("first layer: bias = ", network[0].bias)
# Test network output before learning
sensors = th.Tensor([[0], [1], [2]])
output = network(sensors)
print(ausgabe)
# Init loss function
lossfn = nn.CrossEntropyLoss()
pred = network(data)
print("loss:", lossfn(pred, classes))
# Init optimizer
optimizer = th.optim.SGD(network.parameters(), lr=1e-1)
# Learning
nrepeat = 2000
for i in range(nrepeat):
optimizer.zero_grad()
pred = network(data)
loss = lossfn(pred, classes)
print("loss:", lossfn(pred, classes))
loss.backward() # this computes the gradient, i.e. the derivatives
optimizer.step()
# Test network output after learning
pred = network(data)
print("loss after", nrepeat, "learning steps:", lossfn(pred, classes))
print("first layer: weights = ", network[0].weight)
print("first layer: bias = ", network[0].bias)
- Kopieren Sie den folgenden Code an das Ende der Python-Datei und testen Sie ihn, indem Sie auf die Schaltfläche "KI zurücksetzen" drücken (Sie können die Print-Anzeigen in der Konsole sehen).
- Nun werden Sie die drei Funktionen init, learn und take_decision erfüllen:
Am Anfang der Datei definieren Sie die folgenden Variablen, auf die in den verschiedenen Funktionen zugegriffen werden kann
network = lossfn = optimizer = None
Innerhalb jeder der drei Funktionen machen Sie diese Variablen mit der Zeile :
global network, lossfn, optimizer
Verschieben Sie den Teil "Initialisierung des Netzwerks" in die Funktion init
Verschieben Sie den Teil "Lernen" in die Funktion learn (aber entfernen Sie die for-Schleife: Setzen Sie nur einen Lernschritt, da Sie wissen, dass die Funktion sehr oft aufgerufen wird).
Schreiben Sie die Funktion take_decision, die die Nummer der Kategorie zurückgeben soll, die dem Eintrag "sensors" entspricht, d. h. 0 oder 1.
- Testen Sie Ihr Programm in der Software, mit dem simulierten Roboter und dann mit dem echten Roboter!
Bilanzund Erfahrungsberichte
Wir hoffen, dass diese Einheit Ihnen geholfen hat, neuronale Netze auf konkrete Weise wiederzuentdecken!!!
In der Programmierung wird die Liste der zugänglichen Funktionen eines Programms als API bezeichnet, was für Application Programming Interface(Schnittstelle zur Anwendungsprogrammierung) steht. Sie wird von Programmierern verwendet, um herauszufinden, wie sie mit dem Programm interagieren können. Die API des Python-Moduls alphai finden Sie unter folgendem Link: https: //drive.google.com/file/d/1C4ovPW_eH5KFz5Y9JvSrzLhtmdOpcp6-/view