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.
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.
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.
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.
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.
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.
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