Benutzer-Werkzeuge

Webseiten-Werkzeuge


ss20:song-generator

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
ss20:song-generator [2020/08/26 13:17]
dahin
ss20:song-generator [2020/08/27 14:19] (aktuell)
dahin
Zeile 1: Zeile 1:
 +[[projekte_im_sommersemester_2020|← Zurück zur Projektauswahl]]
  
 ====== Song-Generator (Charts Garantie) [SS20] ====== ====== Song-Generator (Charts Garantie) [SS20] ======
Zeile 38: Zeile 39:
  
 **Projektablauf:​** **Projektablauf:​**
 +
 Als erstes braucht man für Machine Learning immer ein Dataset, also in unserem Fall möglichst viele Midi Dateien. Gemeinsam haben wir einige Songs zusammengetragen und daraus unser Dataset erstellt. Als erstes braucht man für Machine Learning immer ein Dataset, also in unserem Fall möglichst viele Midi Dateien. Gemeinsam haben wir einige Songs zusammengetragen und daraus unser Dataset erstellt.
 Um unser neuronales Netz zu trainieren benutzen wir Magenta (baut auf Tensorflow und Keras auf). In Magenta können neuronale Netze aber meistens nicht direkt mit Midi Dateien trainiert werden. Deswegen haben wir anschließend alle Midi Dateien in eine .tfrecord Datei umgewandelt,​ dabei werden alle Midi Dateien in einer einzigen .tfrecord - Datei zusammengefasst. In der Magenta Dokumentation wird .tfrecord als effizienteres Dateiformat (im Vergleich zu Midi) beschrieben,​ auf das sich leichter zugreifen lässt. Die entstandene .tfrecord-Datei wird anschließend in Trainings- und Testdateien geteilt. Bei der Erstellung der .tfrecord-Datei muss bereits die Konfiguration,​ mit der später gearbeitet werden soll, angegeben werden, damit sie entsprechend formatiert wird. Um unser neuronales Netz zu trainieren benutzen wir Magenta (baut auf Tensorflow und Keras auf). In Magenta können neuronale Netze aber meistens nicht direkt mit Midi Dateien trainiert werden. Deswegen haben wir anschließend alle Midi Dateien in eine .tfrecord Datei umgewandelt,​ dabei werden alle Midi Dateien in einer einzigen .tfrecord - Datei zusammengefasst. In der Magenta Dokumentation wird .tfrecord als effizienteres Dateiformat (im Vergleich zu Midi) beschrieben,​ auf das sich leichter zugreifen lässt. Die entstandene .tfrecord-Datei wird anschließend in Trainings- und Testdateien geteilt. Bei der Erstellung der .tfrecord-Datei muss bereits die Konfiguration,​ mit der später gearbeitet werden soll, angegeben werden, damit sie entsprechend formatiert wird.
Zeile 44: Zeile 46:
 Als nächstes haben wir also unser neuronales Netz trainiert, indem wir die Trainingsdateien dem neuronalen Netz übergeben haben und dieses daraus gelernt hat. Genauer gesagt geht das neuronale Netz ohne Informationen an diese Daten heran und arbeitet dann in dem gegebenen Rahmen. Wir haben den Hyperparameter "batch size" auf 64 gesetzt, was in diesem Fall bedeutet, dass immer 64 Stücke gemeinsam angeguckt werden und ein Teil aus einer 64x64 Matrix besteht, die Größe der Matrix haben wir mit dem Hyperparameter "​rnn_layer_sizes"​ festgelegt. Je höher diese Zahl desto weiter ist der Rahmen, in dem das neuronale Netz arbeiten kann. Je weiter der Rahmen, desto eher neigen neuronale Netze zu Over Fitting, also fast perfekten Vorhersagen bei den Testdateien und sehr schlechten Vorhersagen bei nicht Testdateien. Wenn der Rahmen zu klein ist, werden die Vorhersagen auch schlecht. Eine gute Veranschaulichung dafür ist, wenn man sich Punkte auf einer Parabel vorstellt dafür eine Gerade zu finden, die alle Punkte möglichst gut trifft. Das kann nie wirklich genau werden, weil die Gerade keine Kurven hat. Als nächstes haben wir also unser neuronales Netz trainiert, indem wir die Trainingsdateien dem neuronalen Netz übergeben haben und dieses daraus gelernt hat. Genauer gesagt geht das neuronale Netz ohne Informationen an diese Daten heran und arbeitet dann in dem gegebenen Rahmen. Wir haben den Hyperparameter "batch size" auf 64 gesetzt, was in diesem Fall bedeutet, dass immer 64 Stücke gemeinsam angeguckt werden und ein Teil aus einer 64x64 Matrix besteht, die Größe der Matrix haben wir mit dem Hyperparameter "​rnn_layer_sizes"​ festgelegt. Je höher diese Zahl desto weiter ist der Rahmen, in dem das neuronale Netz arbeiten kann. Je weiter der Rahmen, desto eher neigen neuronale Netze zu Over Fitting, also fast perfekten Vorhersagen bei den Testdateien und sehr schlechten Vorhersagen bei nicht Testdateien. Wenn der Rahmen zu klein ist, werden die Vorhersagen auch schlecht. Eine gute Veranschaulichung dafür ist, wenn man sich Punkte auf einer Parabel vorstellt dafür eine Gerade zu finden, die alle Punkte möglichst gut trifft. Das kann nie wirklich genau werden, weil die Gerade keine Kurven hat.
  
-Das neuronale Netz versucht eine möglichst gute Funktion zu finden, ​um aus gegebenen Daten möglichst nah an die gewünschten Daten zu kommen. Das erfordert ​sehr viel Leistung ​von einem Computer, weshalb wir ab diesem Schritt mit Google-Colab gearbeitet haben, dort wird der Code über Google Rechner durchgeführt.+Das neuronale Netz versucht eine Funktion zu finden, ​die mit gegebenen Daten möglichst nah an die gewünschten Daten herankommt. Das erfordert ​eine hohe PC-Leistung ​aufgrund der vielen Rechnungen, weshalb wir ab diesem Schritt mit Google-Colab gearbeitet haben, dort wird der Code über Google Rechner durchgeführt.
 Dieses Netzwerk haben wir ungefähr 20000 Durchläufe machen lassen, woraus dann unsere Endergebnisse entstanden sind. Dieses Netzwerk haben wir ungefähr 20000 Durchläufe machen lassen, woraus dann unsere Endergebnisse entstanden sind.
  
Zeile 53: Zeile 55:
 **Code:** **Code:**
  
-[[https://colab.research.google.com/​drive/​1wc5DE3N-9V6jSkt_Dzd3yfvBxMriuHYB?​usp=sharing ​Google-Colab-Notebook]]+{{:ss20:​song-generator.ipynb.zip|}}
  
 +**Musikbeispiele (von uns generiert):​**
  
 +{{:​ss20:​2020-07-13_162359_10.mid.zip|}}
  
 **Danksagung:​** **Danksagung:​**
ss20/song-generator.1598440650.txt.gz · Zuletzt geändert: 2020/08/26 13:17 von dahin