Entdecken Sie unsere
Ressourcen

Übung: Q-Learning oder Programmieren mit Pytorch

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

  1. 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.
  1. Ä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)

  1. 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).
  2. 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.

  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