Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
talit:neuronale_netze_kurs [2024-07-01 13:45] – § gratalit:neuronale_netze_kurs [2025-07-02 11:00] (aktuell) – [1. Plan] hof
Zeile 21: Zeile 21:
 |MI Morgen| Recap: Neuronale Netze Programmieren | |MI Morgen| Recap: Neuronale Netze Programmieren |
 |:::| weiter an Aufgaben | |:::| weiter an Aufgaben |
-|MI Nachmittag| weiter an Aufgaben |+|MI Nachmittag| Neuronale Netzwerke mit Tensorflow |
 |DO Morgen| weiter an Aufgaben | |DO Morgen| weiter an Aufgaben |
 |DO Nachmittag| Buffer | |DO Nachmittag| Buffer |
Zeile 38: Zeile 38:
    * {{ :talit:data_mnist.zip |}}    * {{ :talit:data_mnist.zip |}}
  
 +==== Repos ==== 
 +<nodisp 1> 
 +++++Hide| 
 +   * [[https://github.com/tkilla77/ksr_talenta_nn|github.com/tkilla77/ksr_talenta_nn]] 
 +++++ 
 +</nodisp>
 ===== - Aufgaben ===== ===== - Aufgaben =====
  
-Erstelle **GitHub-Repo** z.B. mit Namen "neural_networks". Lege alle deine Code-Files hier drin ab. Committe und pushe regelmässig.+Erstelle **GitHub-Repo** z.B. mit Namen "talit\_neural\_networks". Lege alle deine Code-Files hier drin ab. Committe und pushe regelmässig.
  
 Aufgaben: Siehe Slides Aufgaben: Siehe Slides
Zeile 63: Zeile 68:
 **Tipps:** **Tipps:**
  
-   * CSV-File einlesen:+   * **CSV-File einlesen:**
  
 <code python> <code python>
Zeile 82: Zeile 87:
  
    * Achtung: Liest man File ein, werden Zahlen typischerweise als Text interpretiert. Daher muss man diese noch in ints umwandeln. Mit *List Comprehensions* geht dies sehr einfach.    * Achtung: Liest man File ein, werden Zahlen typischerweise als Text interpretiert. Daher muss man diese noch in ints umwandeln. Mit *List Comprehensions* geht dies sehr einfach.
 +
 +   * **Numpy-Arrays in File speichern und laden** (z.B. Liste mit Gewichtsmatrizen):
 +
 +<code python>
 +import numpy as np
 +
 +# SAVE LIST OF NP ARRAYS
 +array_list = [np.array([1, 2, 3]), np.array([[4, 5], [6, 7]]), np.array([8, 9, 10, 11])]
 +object_array = np.array(array_list, dtype=object)
 +np.save('array_list.npy', object_array)
 +
 +# LOAD INTO LIST OF NP ARRAYS
 +loaded_array_list = np.load('array_list.npy', allow_pickle=True)
 +loaded_array_list = list(loaded_array_list)
 +</code>
  
 ==== Aufgabe 2 ==== ==== Aufgabe 2 ====
  
 +<nodisp 2>
 +++++2024|
 <color red>**Bemerkung für 2024**: Leider hatten wir keine Zeit, die **objektorientierte Programmierung (OOP)** zu behandeln. Recherchiere deshalb selbst kurz dazu im Internet oder studiere ein passendes Video, z.B.:</color> <color red>**Bemerkung für 2024**: Leider hatten wir keine Zeit, die **objektorientierte Programmierung (OOP)** zu behandeln. Recherchiere deshalb selbst kurz dazu im Internet oder studiere ein passendes Video, z.B.:</color>
  
Zeile 90: Zeile 112:
    * [[https://www.youtube.com/watch?v=q2SGW2VgwAM]]    * [[https://www.youtube.com/watch?v=q2SGW2VgwAM]]
  
 +++++
 +</nodisp>
  
 Auftrag: Auftrag:
Zeile 120: Zeile 144:
          # ...          # ...
  
-    def test(self, dataList):+    def test(self, data_list):
          # ...          # ...
  
Zeile 133: Zeile 157:
  
    * **Ziel: NN für Toy-Problem trainieren**    * **Ziel: NN für Toy-Problem trainieren**
-   * Mache eine Kopie des Files `02_feedforward_oop.py` und speichere diese unter dem Namen `03_toyproblem_training.py` (resp. `<...>.ipynb`)+   * Mache eine Kopie des Files `02_feedforward_oop.py` und speichere diese unter dem Namen `03_toy_problem_training.py` (resp. `<...>.ipynb`)
    * Kommentiere alles, was mit dem MNIST-Datensatz zu tun hat, aus. Für den Moment wollen wir uns nur um das Toy-Problem kümmern.    * Kommentiere alles, was mit dem MNIST-Datensatz zu tun hat, aus. Für den Moment wollen wir uns nur um das Toy-Problem kümmern.
    * Erweitere deine Network-Klasse um das Attribut `learning_rate`. Ein Wert für diese soll als Argument für die `__init__`-Methode übergeben werden, wenn ein `Network`-Objekt erstellt wird.    * Erweitere deine Network-Klasse um das Attribut `learning_rate`. Ein Wert für diese soll als Argument für die `__init__`-Methode übergeben werden, wenn ein `Network`-Objekt erstellt wird.
Zeile 143: Zeile 167:
    * Besprich deine Lösung mit dem Lehrer.    * Besprich deine Lösung mit dem Lehrer.
  
 +<code python>
 +# Stuktur:
 +class Network:
 +    def __init__(self, input_neurons, hidden_neurons, output_neurons):
 +        # Variablen für Anz. Neuronen definieren
 +        # Gewichtsmatrizen erzeugen (zufällige Werte)
 + 
 +    def feedforward(self, x):
 +        # hidden Layer h aus Eingangswerten x und Gewichtsmatrix wA berechnen. 
 +        # output Layer y  aus Ausgangswerten y und Gewichtsmatrix wB berechnen.
 +        # beides (h und y) zurückgeben.
 + 
 +    def test(self, data_list):
 +        # data_list Zeile für Zeile durchgehen: 
 +        # Target-Wert auslesen und Target-Vektor erstellen,
 +        # Einangswerte auslesen und Eingangs-Vektor erstellen. --> read_data
 +        # Hidden- und Output-Werte aus Eingangswerten berechnen --> feedforward
 +        # Ausgangswert mit Eingangswert vergleichen, korrekte Resultate zählen
 +        # Erfolgsquote zurückgeben.
  
 +    def train(self, data_list):
 +    # data_list Zeile für Zeile durchgehen:
 +    # Target-Wert auslesen und Target-Vektor erstellen,
 +        # Einangswerte auslesen und Eingangs-Vektor erstellen. --> read_data
 +        # Hidden- und Output-Werte aus Eingangswerten berechnen --> feedforward
 +        # Fehler auf Output-Layer berechnenen (Target - Output)
 +        # Fehler auf Hidden-Layer berechnen  (Fehler auf Output dot wB)
 +        # Gewichtsmatrizen wA und WB aktualisieren (siehe Folie "Zusammenfassung")
 + 
 +# Erstelle ein Netzwerk für das Toy-Problem:
 +toy_net = Network(4, 3, 2)
 +# Datenliste aus CSV auslesen und:
 +# Testen (Erfolg für Toy-Problem ca. 50 %)
 +# Trainieren 
 +# Testen (Erfolg hoffentlich ca. 90 %)
 +</code>
 ==== Aufgabe 4 ==== ==== Aufgabe 4 ====
  
  • talit/neuronale_netze_kurs.1719841531.txt.gz
  • Zuletzt geändert: 2024-07-01 13:45
  • von gra