Das Projekt baut ein Recurrent Neural Network (RNN) zur Musikgenerierung auf. Das Modell ist darauf trainiert, die Muster in Rohnoten in ABC-Notation zu lernen, wodurch Musik generiert wird. Der Datensatz wird von Kaggle gesammelt und enthält die ABC-Notation von Liedern. Link: https://www.kaggle.com/datasets/raj5287/abc-notation-of-tunes?datasetId=156963&sortBy=dateRun&tab=profile Der Text im Datensatz wird zunächst vektorisiert, um eine numerische Darstellung zur Verwaltung einer Nachschlagetabelle zu erstellen. Wir werden einige Beispielsequenzen verwenden, um das RNN mit einer bestimmten Sequenzlänge zu trainieren. Es wird auch eine Zielsequenz zur Vorhersage des nächsten Zeichens geben. Dies wird mithilfe der Batch-Methode implementiert, die diesen Strom von Zeichenindizes in Sequenzen der gewünschten Größe umwandelt. Das von uns erstellte RNN-Modell basiert auf der LSTM-Architektur und verfügt über den Initialisierer „glorot_uniform“ und die Aktivierungsfunktion „sigmoid“, wobei wir den Zustandsvektor verwenden, um Informationen über die zeitlichen Beziehungen zwischen aufeinanderfolgenden Zeichen zu verwalten. Die endgültige Ausgabe des LSTM wird dann in eine vollständig verbundene dichte Schicht eingespeist, wo wir einen Softmax für jedes Zeichen im Vokabular ausgeben und dann aus dieser Verteilung Stichproben ziehen, um das nächste Zeichen vorherzusagen.
Schicht 1: Einbettungsschicht zur Umwandlung von Indizes in dichte Vektoren mit einer festen Einbettungsgröße
Schicht 2: LSTM mit der Anzahl der Einheiten rnn_units.
Schicht 3: Dichte (vollständig verbundene) Schicht, die die LSTM-Ausgabe in die Vokabulargröße umwandelt.
Das RNN-Modell wird dann mithilfe einer Form des Kreuzentropieverlusts (Verlust der negativen logarithmischen Wahrscheinlichkeit) trainiert, d. h. sparse_categorical_crossentropy loss, da es ganzzahlige Ziele für kategoriale Klassifizierungsaufgaben verwendet. Wir wollen den Verlust anhand der wahren Ziele – den Labels – und der vorhergesagten Ziele – der Logits – berechnen. Zur Einstellung und Optimierung werden Hyperparameter definiert. Als Optimierer für den Trainingsbetrieb wird der Adam-Optimierer verwendet. Das Modell wird für 3000 Iterationen mit einer Stapelgröße von 10 und einer Sequenzlänge von 100 trainiert. Das Modell lernt besser, wenn die Lernrate auf 1e-3 eingestellt ist. Um Musik zu erzeugen, folgt das Modell einem Vorhersageverfahren:
Schritt 1: Initialisieren Sie eine „Seed“-Startzeichenfolge und den RNN-Status und legen Sie die Anzahl der Zeichen fest, die wir generieren möchten.
Schritt 2: Verwenden Sie die Startzeichenfolge und den RNN-Status, um die Wahrscheinlichkeitsverteilung über das nächste vorhergesagte Zeichen zu erhalten.
Schritt 3: Stichprobe aus der Multinomialverteilung, um den Index des vorhergesagten Zeichens zu berechnen. Dieses vorhergesagte Zeichen wird dann als nächste Eingabe für das Modell verwendet.
Schritt 4: Bei jedem Zeitschritt wird der aktualisierte RNN-Status zurück in das Modell eingespeist, sodass es nun mehr Kontext für die nächste Vorhersage hat. Nach der Vorhersage des nächsten Zeichens werden die aktualisierten RNN-Zustände erneut in das Modell eingespeist, wodurch es Sequenzabhängigkeiten in den Daten lernt, da es mehr Informationen aus den vorherigen Vorhersagen erhält.
Jetzt generiert das Modell Songs mit einem benutzerdefinierten „start_string“ und einer „generation_length“.