Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws2021:ekg-analyse

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws2021:ekg-analyse [2021/04/06 18:18]
annika_cibis [Trainingsfunktion]
ws2021:ekg-analyse [2021/04/06 21:36] (aktuell)
annika_cibis [Medizinische Grundlagen]
Zeile 23: Zeile 23:
 {{ws2021:​ekg:​ echtes_ekg_annotiert2.png?​250|Sinuskurve aus Datensatz}} {{ws2021:​ekg:​ echtes_ekg_annotiert2.png?​250|Sinuskurve aus Datensatz}}
  
-Hier seht ihr einen gesunden Sinusrhythmus (schematisch und ein Plot aus dem Datensatz), wie genau er aufgebaut ist könnt ihr [[hier]] erfahren.+Hier seht ihr einen gesunden Sinusrhythmus (//​links// ​schematisch und //​rechts// ​ein Plot aus dem Datensatz), wie genau er aufgebaut ist könnt ihr [[hier]] erfahren.
  
 ==== Datensatz ==== ==== Datensatz ====
Zeile 82: Zeile 82:
 [[Hier geht es zu unserem Code mit Convolutional Layern]]. [[Hier geht es zu unserem Code mit Convolutional Layern]].
 === ResNet-Archithektur === === ResNet-Archithektur ===
 +{{resnet_schematisch.jpg ?250 |ResNet}}
 +
 Im Anschluss haben wir eine ResNet-Architektur eingeführt,​ um einen besseren Lernerfolg durch ein tieferes Lernen zu erreichen. Bei der ResNet-Architektur werden noch zusätzliche Layer eingeführt,​ sogenannte Skip Connections,​ die immer ein paar Schichten überspringen und so einer späteren Schicht einen output von einer vorherigen Schicht geben. Dies ermöglicht mehr Schichten, ohne dass Informationen verloren gehen. Im Anschluss haben wir eine ResNet-Architektur eingeführt,​ um einen besseren Lernerfolg durch ein tieferes Lernen zu erreichen. Bei der ResNet-Architektur werden noch zusätzliche Layer eingeführt,​ sogenannte Skip Connections,​ die immer ein paar Schichten überspringen und so einer späteren Schicht einen output von einer vorherigen Schicht geben. Dies ermöglicht mehr Schichten, ohne dass Informationen verloren gehen.
 Wir haben für die Implementierung die Netzwerk-Klasse minimal verändert ([[zur aktualisierten Klasse kommt ihr hier]]) und eine [[zusätzliche Klasse Resnet]]. Wir haben für die Implementierung die Netzwerk-Klasse minimal verändert ([[zur aktualisierten Klasse kommt ihr hier]]) und eine [[zusätzliche Klasse Resnet]].
Zeile 125: Zeile 127:
 </​code>​ </​code>​
 ==== Evaluationsfunktion ==== ==== Evaluationsfunktion ====
 +Die Evaluationsfunktion dient der Überprüfung des Lernprozesses und -erfolges. Wir übergen ihr unabhängige Testdaten, die das Netzwerk während des Trainings noch nicht gesehen hat und schicken diese durch unser Netzwerk. Anschließend ermitteln wir, wie viele der Testdaten von dem trainierten Netz richtig erkannt wurden.
  
 +<​code>​
 +def evaluate(test_x = X_evaluation,​ test_y = y_evaluation):​
 +    net.eval()
 +    z = 0
 +    for i in range(len(test_x)):​
 +        x = np.swapaxes(test_x[i],​ 0, 1)
 +        x = Variable(torch.Tensor(x))
 +        x = x.unsqueeze(0)
 +        if torch.argmax(net(x)) == test_y[test_y.index[i]]:​
 +            z += 1
 +    return z/​len(test_x)
 +</​code>​
 ==== Ergebnis ==== ==== Ergebnis ====
 +{{ws2021:​ekg:​cross_entropy_loss2.png }} 
 +Der Graph zeigt die Klassifizierungsgenauigkeit //(blau)// und den Fehler //​(orange)//​ über 9.000 Epochen. Unser Netz erkennt also ungefähr 83% der unabhängigen Test-Daten richtig. Das ist insofern ein Erfolg, dass ohne Training nur in etwa die Hälfte der EKGs richtig zugeordnet werden, da circa eine Hälfte der Daten jeweils gesunde beziehungsweise ungesunde EKGs enthalten. Somit hat unser Netz erfolgreich gelernt!
 +
 +
 +Allerdings ist dies noch ausbaufähig,​ da in etwa jedes fünfte EKG falsch zugeordnet wird. Für eine Anwendung in der klinischen Praxis ist die Fehlerquote demnach viel zu hoch und der Algorithmus nicht zuverlässig. Dennoch ist es für uns, mit sehr wenig Programmier-Erfahrung,​ für ein Erst-Semester Projekt ein großer Erfolg.
  
 +[[Hier findet ihr den finalen Code]]
 ===== Verlauf der Projektarbeit ===== ===== Verlauf der Projektarbeit =====
 ==== Protokolle ==== ==== Protokolle ====
Zeile 135: Zeile 156:
 ===== Fazit und Ausblick ===== ===== Fazit und Ausblick =====
 Wir haben beide Python-Kenntnisse und medizinisches Wissen erworben und Erfahrungen im Bereich Machine Learning sammeln können. Fehlerbehebung mussten wir vor allem vornehmen, wenn es darum ging, dass bestimmte Tensor-Größen nicht zusammenpassten oder in- und output sich in ihrer Dimension unterschieden. Wir haben beide Python-Kenntnisse und medizinisches Wissen erworben und Erfahrungen im Bereich Machine Learning sammeln können. Fehlerbehebung mussten wir vor allem vornehmen, wenn es darum ging, dass bestimmte Tensor-Größen nicht zusammenpassten oder in- und output sich in ihrer Dimension unterschieden.
-Man könnte das Netz mit Sicherheit noch weiter verbessern, indem man die Hyperparameter optimal einstellt und die Netzwerkarchitektur noch ein wenig anpasst. Außerdem könnte man als Erweiterung,​ das Netz spezifische Krankheitsbilder erkennen lassen. ​Dazu sind wir aus zeitlichen Gründen leider nicht mehr gekommen.+Man könnte das Netz mit Sicherheit noch weiter verbessern, indem man die Hyperparameter optimal einstellt und die Netzwerkarchitektur noch ein wenig anpasst. Außerdem könnte man als Erweiterung,​ das Netz spezifische Krankheitsbilder erkennen lassen. ​Dies hatten wir ganz zu Beginn auch überlegt, allerdings hat die "​Verbesserungsphase"​ unseres Netzes sehr viel länger gedauert, als wir dachten und so sind wir aus zeitlichen Gründen leider nicht mehr dazu gekommen.
  
 ====== Literatur ====== ====== Literatur ======
-[[https://​doi.org/​10.1038/​s41597-020-0495-6 | Wagner, P., Strodthoff, N., Bousseljot, R.-D., Kreiseler, D., Lunze, F.I., Samek, W., Schaeffter, T. (2020), PTB-XL: A Large Publicly Available ECG Dataset. Scientific Data.]] ​ 
  
 +====Grundlagen Machine Learning ====
  
-[[https://www.youtube.com/playlist?​list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi ​Videos zu Machine-Learning von 3Blue1Brown]]+[[http://neuralnetworksanddeeplearning.com/index.html|Michael Nielsen: neural networks and deep learning]]
  
-[[https://​www.timeseriesclassification.com/​ | Time-Series classification]]+[[https://​www.youtube.com/​playlist?​list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi |3Blue1Brown:​ artificial intelligence video series]] 
 + 
 +[[https://​www.timeseriesclassification.com/​ | Time-Series classification ​repository]] 
 + 
 +====Links zum Datensatz==== 
 +[[https://​doi.org/​10.1038/​s41597-020-0495-6 | Wagner, P., Strodthoff, N., Bousseljot, R.-D., Kreiseler, D., Lunze, F.I., Samek, W., Schaeffter, T. (2020), PTB-XL: A Large Publicly Available ECG Dataset. Scientific Data.]] 
 +  
 +[[https://​github.com/​helme/​ecg_ptbxl_benchmarking/​blob/​c1efb0275c0d278e5a09d5e9dbbbb85fad629ce3/​code/​models/​resnet1d.py#​L90|ResNet implementation for PTB-XL ecg dataset - GitHub]] 
 + 
 +====Implementierung unseres Netzes==== 
 + 
 +=== Pytorch=== 
 +[[https://​towardsdatascience.com/​pytorch-basics-how-to-train-your-neural-net-intro-to-cnn-26a14c2ea29| pytorch basics: how to train a neural net into cnn - Towards Data Science]] 
 + 
 +[[https://​www.analyticsvidhya.com/​blog/​2019/​09/​introduction-to-pytorch-from-scratch/?​utm_source=blog&​utm_medium=building-image-classification-models-cnn-pytorch| a beginner friendly guide to PyTorch and how it works from scratch]] 
 + 
 +[[https://​pytorch.org/​tutorials/​beginner/​deep_learning_60min_blitz.html|Deep Learning with PyTorch: A 60 Minute Blitz]] 
 + 
 +[[https://​towardsdatascience.com/​how-to-build-your-own-neural-network-from-scratch-in-python-68998a08e4f6|How to build your own Neural Network from scratch in Python - Towards Data Science]] 
 + 
 +===Verbesserung des Netzes=== 
 + 
 +[[https://​medium.com/​@Rehan_Sayyad/​how-to-use-convolutional-neural-networks-for-time-series-classification-80575131a474|How to Use Convolutional Neural Networks for Time Series Classification]] 
 + 
 +[[https://​towardsdatascience.com/​a-comprehensive-guide-to-convolutional-neural-networks-the-eli5-way-3bd2b1164a53|A Comprehensive Guide to Convolutional Neural Networks — the ELI5 way]] 
 + 
 +[[https://​machinelearningmastery.com/​convolutional-layers-for-deep-learning-neural-networks/​|How Do Convolutional Layers Work in Deep Learning Neural Networks?]]
  
 [[https://​arxiv.org/​pdf/​1512.03385.pdf | Paper zu ResNet-Archithektur]] [[https://​arxiv.org/​pdf/​1512.03385.pdf | Paper zu ResNet-Archithektur]]
  
-[[https://​www.youtube.com/​watch?​v=DkNIBBBvcPs | Video zu ResNet]]+[[https://​www.youtube.com/​watch?​v=DkNIBBBvcPs | PyTorch ​ResNet ​implementation from scratch video]]
  
 [[https://​github.com/​helme/​ecg_ptbxl_benchmarking/​blob/​c1efb0275c0d278e5a09d5e9dbbbb85fad629ce3/​code/​models/​resnet1d.py#​L90 | Beispielcode mit ResNet und PyTorch]] [[https://​github.com/​helme/​ecg_ptbxl_benchmarking/​blob/​c1efb0275c0d278e5a09d5e9dbbbb85fad629ce3/​code/​models/​resnet1d.py#​L90 | Beispielcode mit ResNet und PyTorch]]
  
-[[https://​towardsdatascience.com/​residual-network-implementing-resnet-a7da63c7b278 | Artikel zu ResNet ]]+[[https://​towardsdatascience.com/​residual-network-implementing-resnet-a7da63c7b278 | ResNet ​implementation - Towards Data Science]] 
 + 
 +[[https://​towardsdatascience.com/​an-overview-of-resnet-and-its-variants-5281e2f56035|an overview of ResNet and its variants - Towards Data Science]] 
 + 
 +[[https://​towardsdatascience.com/​batch-normalization-an-intuitive-explanation-42e473fa753f| Batch-Normalization - Towards Data Science]]
  
  
  
ws2021/ekg-analyse.1617725885.txt.gz · Zuletzt geändert: 2021/04/06 18:18 von annika_cibis