[PYTHON] Komponieren Sie mit einem neuronalen Netzwerk! Führen Sie Magenta aus

Was ist Magenta?

Neulich wurde auf Github ein neues Projekt namens Magenta von Google eröffnet. https://github.com/tensorflow/magenta

Magenta ist ein Projekt zur Erzeugung von Kunst und Musik mithilfe eines neuronalen Netzwerks.

Ziel ist es, die Kreativität des maschinellen Lernens zu entwickeln und eine Gemeinschaft von Künstlern und maschinellem Lernen zu werden.

Wiederkehrendes neuronales Netzwerk zum Komponieren

Als erstes Magenta wurde ein Modell des wiederkehrenden neuronalen Netzwerks (RNN) veröffentlicht, das sich zusammensetzt. Es enthält eine Technik namens LSTM (Long Short-Term Memory). Laut der offiziellen Magenta-Website (http://magenta.tensorflow.org/)

It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Dies ist ein bewusst vereinfachtes Modell, und Sie können nicht erwarten, herausragende Musik zu machen. Wir werden jedoch weiterhin komplexere Modelle veröffentlichen.

Daher ist es am besten, dieses Modell als Einführung auszuführen.

Vorbereitung

Ich bin in einer Ubuntu-Umgebung. Sie benötigen einen Mac oder Linux, da Sie Tensorflow benötigen, der nicht mit Windows kompatibel ist.

Klonen Sie Magenta von Github und installieren Sie Tensorflow und das Build Tool Bazel.

Erstellen eines Kompositionsmodells

Lassen Sie uns nun das Kompositionsmodell von hier aus erstellen.

Um das Modell zu erstellen, benötigen Sie MIDI-Daten, die die Melodie des Songs enthalten. Wenn Sie keine MIDI-Daten haben, wurde empfohlen, diese von http://www.midiworld.com/files/142/ abzurufen. ~~ Es ist besser, einen MIDI-Datenwert zu verwenden. Aus irgendeinem Grund hat es nicht funktioniert, wenn ich es mit drei gemacht habe. ~~ (Es scheint, dass einige MIDI-Dateien verwendet werden können und andere nicht.) Diesmal habe ich die Midi-Datei in ein Verzeichnis namens / tmp / midi gestellt

Von hier aus können Sie ein Kompositionsmodell erstellen und MIDI erstellen, indem Sie Befehle in das Terminal eingeben (Strg + Alt + T für Ubuntu). Der Inhalt wird in Python erstellt, aber ich lege mich nicht wirklich mit dem Code an.

Konvertieren Sie zunächst die MIDI-Datei in das von Tensorflow verwendete tfrecord-Format

MIDI_DIRECTORY=/tmp/midi
SEQUENCES_TFRECORD=/tmp/notesequences.tfrecord
bazel run //magenta/scripts:convert_midi_dir_to_note_sequences -- \
--midi_dir=$MIDI_DIRECTORY \
--output_file=$SEQUENCES_TFRECORD \
--recursive

Generieren Sie als Nächstes zwei tfrecord-Dateien aus der generierten tfrecord-Datei. Dies ist unterteilt in Trainingsdaten (Zugdaten) und Bewertungsdaten (Bewertungsdaten). Diesmal werden nur Trainingsdaten verwendet.

SEQUENCES_TFRECORD=/tmp/notesequences.tfrecord
DATASET_DIR=/tmp/basic_rnn/sequence_examples
TRAIN_DATA=$DATASET_DIR/training_melodies.tfrecord
EVAL_DATA=$DATASET_DIR/eval_melodies.tfrecord
EVAL_RATIO=0.10

bazel run //magenta/models/basic_rnn:basic_rnn_create_dataset -- \
--input=$SEQUENCES_TFRECORD \
--output_dir=$DATASET_DIR \
--eval_ratio=$EVAL_RATIO

Wir werden RNN anhand von Trainingsdaten lernen. num_training_steps ist die Anzahl der Trainings, bitte reduzieren Sie sie, wenn es bei 20000 zu viel dauert. Meine Maschine war nicht sehr gut, also habe ich sie auf 1000 eingestellt. Es scheint jedoch, dass der RNN-Status auch während des Lernens jeweils zehnmal aufgezeichnet wird, sodass MIDI generiert werden kann.

bazel build //magenta/models/basic_rnn:basic_rnn_train
./bazel-bin/magenta/models/basic_rnn/basic_rnn_train --run_dir=/tmp/basic_rnn/logdir/run1 --sequence_example_file=$TRAIN_DATA --hparams='{"rnn_layer_sizes":[50]}' --num_training_steps=20000

Sobald dies geschehen war, war das Kompositionsmodell vollständig.

Generierung einer Kompositions-MIDI-Datei

Bevor wir nun endlich eine MIDI-Datei generieren, müssen wir eine weitere MIDI-Datei vorbereiten. Weil RNN den Melodiefluss aus MIDI-Dateien lernt. Mit anderen Worten, ich lerne, dass "diese Melodie vorne ist, so dass dieser Sound nicht als nächstes kommt". Wenn daher keine Melodie davor steht, kann die darauf folgende Melodie nicht erstellt werden. Sie benötigen eine Midi-Datei, die diese Melodie enthält. Dieses Mal habe ich eine eintaktige Melodie erstellt und sie mit dem Namen primer.mid in / tmp eingefügt.

PRIMER_PATH=/tmp/primer.mid
bazel run //magenta/models/basic_rnn:basic_rnn_generate -- \
--run_dir=/tmp/basic_rnn/logdir/run1 \
--hparams='{"rnn_layer_sizes":[50]}' \
--output_dir=/tmp/basic_rnn/generated \
--num_outputs=10 \
--num_steps=128 \
--primer_midi=$PRIMER_PATH

Dieser Befehl erstellt 16 MIDI-Dateien in / tmp / basic_rnn_generated. Auf jede prime.mid-Melodie folgt eine Melodie mit etwa 4 Takten.

Es war keine sehr gute Melodie

Hier ist die erstellte Melodie https://soundcloud.com/ig4osq8tqokz/magenta1

Es stellte sich nicht als sehr gute Melodie heraus. Es kann von der Begleitung abhängen, aber ...

Der Grund, warum es nicht gut war ・ Erstens ist das Model so ein Typ -Die als Trainingsdaten verwendete MIDI-Datei war nicht gut (in dieser Hinsicht habe ich nicht die MIDI-Datei verwendet, die nur die Melodie enthält) ・ Weniger lernen

Ich werde es jedoch vorerst sorgfältig tun.

Und

Das Lernen braucht viel Zeit. Es dauert 1 Minute, bis jeder MIDI-Song 10 Mal gelernt hat. Kann es durch die Verwendung einer GPU verbessert werden (obwohl ich es überhaupt nicht habe)?

Recommended Posts

Komponieren Sie mit einem neuronalen Netzwerk! Führen Sie Magenta aus
Experimentieren Sie mit verschiedenen Optimierungsalgorithmen im neuronalen Netz
Implementieren Sie ein dreischichtiges neuronales Netzwerk
Trainieren Sie MNIST-Daten mit PyTorch mithilfe eines neuronalen Netzwerks
Neuronales Netzwerk mit Python (Scikit-Learn)
3. Normalverteilung mit neuronalem Netz!
Neuronales Netz beginnend mit Chainer
4. Kreisparameter mit einem neuronalen Netzwerk!
Erstellen Sie eine Web-App, die Zahlen mit einem neuronalen Netzwerk erkennt
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Neuronales Netzwerk mit OpenCV 3 und Python 3
Implementierung eines zweischichtigen neuronalen Netzwerks 2
Einfaches Klassifizierungsmodell mit neuronalem Netz
Was ist das Convolutional Neural Network?
Schreiben Sie ein Restnetzwerk mit TFLearn
[TensorFlow] [Keras] Aufbau eines neuronalen Netzwerks mit Keras
Ich habe versucht, ein zweischichtiges neuronales Netzwerk zu implementieren
Vorhersage von Zeitreihendaten mit einem neuronalen Netzwerk
Behalten Sie das mit PyBrain aufgebaute neuronale Netzwerk bei
Führen Sie eine Python-Webanwendung mit Docker aus
2. Mittelwert und Standardabweichung beim neuronalen Netz!
Erstellen Sie mithilfe des TensorFlow-Faltungsnetzwerks einen Klassifikator mit einer Handschrifterkennungsrate von 99,2%
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Visualisieren Sie die innere Schicht des neuronalen Netzwerks
Überprüfung der Chargennormalisierung mit einem mehrschichtigen neuronalen Netz
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Kompilieren Sie Rust und führen Sie es mit einem einzigen Befehl aus
Parametrisches neuronales Netzwerk
Führen Sie eine Pipeline für maschinelles Lernen mit Cloud Dataflow (Python) aus.
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Code-Server-Online-Umgebung (2) Erstellen Sie mit Boto3 ein virtuelles Netzwerk
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
Implementierung eines Faltungs-Neuronalen Netzwerks mit nur Numpy
Führen Sie eine Python-Datei mit relativem Import in PyCharm aus
Ich möchte einen Quantencomputer mit Python betreiben
Führen Sie Python mit VBA aus
Führen Sie prepDE.py mit python3 aus
A4 Größe mit Python-Pptx
Richten Sie eine automatische Testumgebung für den Browser ein, in der Selenium + Pytest mit Docker Compose ausgeführt werden kann
Implementieren Sie das Convolutional Neural Network
Führen Sie Blender mit Python aus
Implementieren Sie das neuronale Netzwerk von Grund auf neu
Erfahrung mit faltbaren neuronalen Netzen
Ich habe ein Convolutional Neural Network (CNN) mit einem TensorFlow-Tutorial zur Cloud9-Klassifizierung handgeschriebener Bilder ausprobiert.
Mit Dekorateur dekorieren
Führen Sie iperf mit Python aus
Ich habe versucht, das grundlegende Modell des wiederkehrenden neuronalen Netzwerks zu implementieren
Eine Python-Probe zum Lernen von XOR mit einem genetischen Algorithmus in einem neuronalen Netz
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Bildklassifizierung mit selbst erstelltem neuronalen Netzwerk von Keras und PyTorch
Versuchen Sie, ein neuronales Netzwerk in Python aufzubauen, ohne eine Bibliothek zu verwenden
[Deep Learning] Bildklassifizierung mit Faltungsnetz [DW Tag 4]
Aufbau eines neuronalen Netzwerks, das XOR durch Z3 reproduziert
[Kausale Suche / kausale Folgerung] Implementieren Sie ein basianisches Netzwerk mit Titanic-Daten
Ich habe einen neuronalen Netzwerkgenerator erstellt, der auf FPGA läuft