Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws2021:hier_geht_es_zur_dokumentation

1. Termin: Gedanken über Ziele des Projekts, Beschäftigung mit dem Datensatz

7.-13. Dezember 2020
Wir haben in der ersten Woche damit begonnen, uns zu überlegen, welche Ziele wir erreichen wollen bzw. in welche Richtung es genau gehen soll und uns Gedanken darüber gemacht, wie wir grob vorgehen bzw. wie wir weiter verfahren wollen. In der Woche zuvor hatten uns Lysanne und Andrea schon auf einen großen Datensatz aufmerksam gemacht, den wir als Grundlage für unser Projekt nutzen wollen. Mit diesem haben wir uns im Anschluss beschäftigt und mithilfe des Quellcodes, der dem Datensatz beigefügt war (siehe unter dem Kapitel Hilfsmittel), die Daten bereits plotten können.

2. Termin: Wiki Eintrag

14.-20. Dezember 2020
In der 2. Woche haben wir unseren Wiki Eintrag erstellt. Dafür haben wir unsere Hilfsmittel und Quellen gesammelt und einen Zeitplan und Ziele formuliert.

3. Termin: Machine-Learning

21. Dezember-3. Januar 2020/21
In das Thema Machine-Learning sind wir mithilfe von vier Videos zu dem Thema von 3Blue1Brown eingestiegen (Link siehe unter Literatur). Dazu haben wir uns intensiv Notizen gemacht und aufgetretene Fragen zusammen geklärt.

4. Termin: Convolutional Networks, PyTorch

4.-10. Januar 2021
Andrea hat uns auf das Paper über Benchmarks verschiedener Netzwerk-Typen zum EKG-Datensatz hingewiesen. Diesem konnten wir entnehmen, dass Convolutional Layers für eine hohe Effektivität erforderlich sind.
Mittels des Buches von Michael Nielsen haben wir unser erstes eigenes neuronales Netzwerk für den MNIST-Datensatz konstruiert. Auf Andreas Empfehlung hin, haben wir allerdings beschlossen eine Machine-Learning Bibliothek zu benutzen, wobei wir uns für PyTorch entschieden haben.

5. Termin: erster Code, PyTorch

11.-17. Januar 2021
Für ein grundlegendes Verständnis von PyTorch haben wir uns Videos auf YouTube angeguckt. Daraufhin konnten wir unser erstes Netzwerk für die EKG-Daten erstellen. Dieses beinhaltet bisher nur lineare Layers und ist noch nicht intelligent. Wir können es zwar mittels integrierter PyTorch Funktionen trainieren, doch bisher ohne Lernerfolg, es kann noch keine gesunden von ungesunden EKGs unterscheiden. Deshalb beschäftogen wir uns mit der Optimierung der Netzwerkarchitektur und Hyperparameter. Eine Schwierigkeit besteht darin, die Daten in einem sinnvollen Format einzulesen, da die Daten zwar eindimensional sind aber zu jedem Zeitpunkt 12 verschiedene Ableitungen betrachtet werden.

6. Termin: Convolutional Networks in PyTorch - Recherche

18.-24. Januar 2021
Wir beschäftigen uns damit, eine Convolutional Layer in unser bisheriges Netzwerk zu integrieren, die es uns ermöglicht jeden Datenpunkt im Kontext zu den umgebenden Werten zu betrachten.

7. Termin: UNSER Convolutional Network mit PyTorch

25.-31. Januar 2021
Wir haben sowohl mit 1D als auch mit 2D Convolutional Layers ein Netzwerk bauen können. Die Ergebnisse des Lernprozesses sind allerdings noch random. Dies fanden wir dadurch heraus, dass wir eine evaluate()-Funktion geschrieben haben. Mithilfe von unabhängigen Testdaten analysiert diese den Erfolg des Lernens.

Hier kommt ihr zum Code

8. Termin: Verbesserung des Netzwerks und Google Colab

01.-07. Febuar 2021
Im Folgenden haben wir versucht unser Netzwerk zu verbessern, damit es nicht mehr nur random-Ergebnisse ausgibt. Denn in der Woche zuvor ist die Loss Funktion zwar mit dem Trainingsprozess gesunken, allerdings konnte das Netz unsere Daten noch nicht erkennen. Dabei haben wir mithilfe von Andrea und einem Benchmarking Paper, wo Quellcode zur Verfügung gestellt wurde, herausgefunden, dass es beispielsweise sinnvoll sein könnte mehr Layers hinzuzufügen. Im Anschluss setzten wir uns damit auseinander, unseren Code in Google Colab auszuführen, da wir damit schneller mit unseren immens großen Daten arbeiten können.

9. Termin: Es lernt! Verbesserung des Lernprozesses

08.-14. Febuar 2021
Nachdem wir unseren Code in Google Colab ausführten und noch ein paar Veränderungen an unserem Netz vornahmen, verzeichneten wir unseren ersten großen Erfolg! Zuvor hatten wir unsere Daten mit einer resize-Funktion eingelesen, die allerdings nicht wie gedacht die Achsen vertauschte, sondern durcheinanderwürfelte. Mithilfe von Andrea konnten wir diesen Fehler aufdecken und, nachdem wir eine swapaxis-Funktion implementiert hatten, konnte unser Netz 79% der EKGs richtig erkennen. Im folgenden versuchten wir unser Netz zu verbessern. Dabei änderten wir im ersten Schritt unsere Fehlerfunktion und verwendeten statt der Mean Squared Error Funktion die Cross Entropy Loss Funktion, die sich besonders bei Klassifikationsproblemen eignet.

Dieser Graph zeigt den Loss (orange) und die richtig erkannten Testdaten (blau) mit wachsender Epoche (50er Schritte) nach der Implementierung unserer Cross-Entropy-Funktion.

Um unsere Rechnungen schneller auszuführen, nutzen wir Grafikkarten, da diese besonders für Matrix- und Vektorrechnungen geeignet sind. Dies ist für uns von Bedeutung, da mehrdimensionale lineare Algebra die mathematische Grundlage für neuronale Netze darstellt. Wir benutzen dafür CUDA, eine von NVIDIA entwickelte Technologie, um über Google Colab auf GPUs zugreifen zu können. Unseren Code erweiterten wir dementsprechend um einige zusätzliche Befehle, die die Rechenzeit verkürzten.

10. Termin: Overfitting und Regularization, Kernel Sizes

15.-21. Febuar 2021

Dieser Graph zeigt die Treffergenauigkeit von den Trainings- (orange) und den Testdaten (blau). Uns wurde klar, dass wir es hier mit dem Problem von Overfitting zu tun haben. Das Netz lernt auswendig anstatt mithilfe von erlernten Mustern und Strukturen die Testdaten zu erkennen.

Overfitting lässt sich am besten durch die Verwendung von mehr Trainingsdaten vermeiden. Da dies in unserem Fall nicht ohne weiteres möglich ist, versuchten wir das Problem durch Regularisation anzugehen. Dieses Verfahren wurde in dem bereits erwähnten Buch über Neuronale Netze vorgestellt.

In unserem Netz haben wir dafür die weight_decay-Option von Pytorch eingeführt. Damit konnten wir eine Treffergenauigkeit von 83% erreichen, also eine Verbesserung um 4 Prozentpunkte.

Zeitgleich versuchten wir unser Netz durch eine höhere Kernel-Size der Convolutional Layer zu verbessern.

Zu unserem aktuellem Code kommt ihr hier.

11. Termin: ResNet Architektur

22.Febuar - 31. März 2021
Im folgenden versuchten wir auf den Hinweis von Stefan hin, eine ResNet Architektur zu implementieren. Dies ermöglicht es, tiefere Netzwerke zu implementieren ohne, dass Informationen von vorherigen Layern vollständig verloren gehen. Die grundlegende Idee besteht darin, sogenannte „Skip Connections“ einzuführen. Dabei werden zusätzliche ResNet Layers implementiert, die einige Convolutional-Layers überspringen und so Informationen von früheren Schichten zu Informationen von darauffolgenden Schichten dazuaddieren.

ws2021/hier_geht_es_zur_dokumentation.txt · Zuletzt geändert: 2021/03/28 14:16 von elena_kirschner