Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
talit:neuronale_netze_kurs [2023-07-06 07:45] – [DrawingWidget] sca | talit:neuronale_netze_kurs [2024-07-04 06:54] (aktuell) – [Files] hof | ||
---|---|---|---|
Zeile 38: | Zeile 38: | ||
* {{ : | * {{ : | ||
+ | ==== Repos ==== | ||
+ | * [[https:// | ||
===== - Aufgaben ===== | ===== - Aufgaben ===== | ||
Zeile 60: | Zeile 62: | ||
* Berechne in %, für wie viele Datenpunkte das NN den richtigen Output liefert (Erfolgsquote). Diese Zahl gibt an, wie gut das NN funktioniert. | * Berechne in %, für wie viele Datenpunkte das NN den richtigen Output liefert (Erfolgsquote). Diese Zahl gibt an, wie gut das NN funktioniert. | ||
* Besprich deine Lösung mit dem Lehrer. | * Besprich deine Lösung mit dem Lehrer. | ||
+ | |||
+ | **Tipps:** | ||
+ | |||
+ | * CSV-File einlesen: | ||
+ | |||
+ | <code python> | ||
+ | ### OPTION 1 | ||
+ | """ | ||
+ | with open(' | ||
+ | data_list = f.readlines() # erstellt Liste | ||
+ | |||
+ | ### OPTION 2 | ||
+ | """ | ||
+ | import csv # ganz oben in Code | ||
+ | |||
+ | with open(' | ||
+ | csv_reader = csv.reader(csv_file) | ||
+ | for row in csv_reader: | ||
+ | # do something with row | ||
+ | </ | ||
+ | |||
+ | * 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. | ||
==== Aufgabe 2 ==== | ==== Aufgabe 2 ==== | ||
+ | |||
+ | <color red> | ||
+ | |||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | Auftrag: | ||
* **Ziel: Grundgerüst für ein neuronales Netzwerk objektorientiert programmieren** | * **Ziel: Grundgerüst für ein neuronales Netzwerk objektorientiert programmieren** | ||
Zeile 76: | Zeile 108: | ||
* Die Klasse hat eine Methode `feedforward`. Dieser wird als Argument ein Input-Array übergeben. Diesen ‘feeded’ sie dann ‘forward’ und berechnet den zugehörigen Output. | * Die Klasse hat eine Methode `feedforward`. Dieser wird als Argument ein Input-Array übergeben. Diesen ‘feeded’ sie dann ‘forward’ und berechnet den zugehörigen Output. | ||
* Die Klasse hat eine Methode `test`. Dieser kann man als Argument einen Datensatz übergeben, der dann durch das NN gefüttert wird. Es wird die Erfolgsquote zurückgegeben: | * Die Klasse hat eine Methode `test`. Dieser kann man als Argument einen Datensatz übergeben, der dann durch das NN gefüttert wird. Es wird die Erfolgsquote zurückgegeben: | ||
- | * Lade sowohl die Daten des Toy-Problems wie auch die MNIST Daten ein. Erstelle je ein Neuronales Netz (Anzahl Neuronen pro Layer richtig wählen) und teste mit der `test` Methode, wie gut dein NN funktioniert. | + | * Lade sowohl die Daten des Toy-Problems wie auch die MNIST Daten ein. Erstelle je ein Neuronales Netz (Anzahl Neuronen pro Layer richtig wählen) und teste mit der `test` Methode, wie gut dein NN funktioniert. |
* Tipp: Da die Gewichtsmatrizen zufällig erzeugt werden, sollte also bei unserem Toy-Problem eine Erfolgsquote von etwa 50% resultieren. | * Tipp: Da die Gewichtsmatrizen zufällig erzeugt werden, sollte also bei unserem Toy-Problem eine Erfolgsquote von etwa 50% resultieren. | ||
* Besprich deine Lösung mit dem Lehrer. | * Besprich deine Lösung mit dem Lehrer. | ||
+ | \\ | ||
+ | <code python> | ||
+ | # Stuktur: | ||
+ | class Network: | ||
+ | def __init__(self, | ||
+ | # ... | ||
+ | |||
+ | def feedforward(self, | ||
+ | # ... | ||
+ | |||
+ | def test(self, data_list): | ||
+ | # ... | ||
+ | |||
+ | # Erstelle ein Netzwerk für das Toy-Problem: | ||
+ | toy_net = Network(4, 3, 2) | ||
+ | |||
+ | # Erstelle ein Netzwerk für den Mnist-Datensatz: | ||
+ | mnist_net = Network(784, | ||
+ | </ | ||
==== Aufgabe 3 ==== | ==== Aufgabe 3 ==== | ||
* **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. `< | + | * Mache eine Kopie des Files `02_feedforward_oop.py` und speichere diese unter dem Namen `03_toy_problem_training.py` (resp. `< |
* 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 355: | Zeile 406: | ||
1. Starte Jupyter-NB (öffnet in Browser): `jupyter-notebook` | 1. Starte Jupyter-NB (öffnet in Browser): `jupyter-notebook` | ||
1. Öffne dort bestehendes `.ipynb` File oder erstelle ein neues | 1. Öffne dort bestehendes `.ipynb` File oder erstelle ein neues | ||
- | + | ||
+ | |||
=== DrawingWidget === | === DrawingWidget === | ||
Zeile 362: | Zeile 415: | ||
``` | ``` | ||
!pip install ipycanvas-drawing | !pip install ipycanvas-drawing | ||
+ | !pip install Pillow | ||
``` | ``` | ||
Zeile 376: | Zeile 430: | ||
</ | </ | ||
- | Auf Daten von gezeichnetem Bild zugreifen und verkleinern $(28x28)$: | + | Auf Daten von gezeichnetem Bild zugreifen und verkleinern $(28 \times 28)$: |
<code python> | <code python> | ||
def resize_image(image, | def resize_image(image, |