[PYTHON] Das Musikgenerierungsprojekt "Magenta" von TensorFlow trainiert MIDI-Dateien und generiert Songs.

Einführung

In diesem Artikel bereiten wir die Entwicklungsumgebung für Magenta vor, lernen die MIDI-Datei und erstellen einen Song. Es entspricht Basic RNN README von Magenta, sodass Sie es lesen können.

Bitte beachten Sie, dass es einige unklare Punkte wie Begriffe gibt. In diesem Artikel finden Sie Informationen zur Vorbereitung der Entwicklungsumgebung.

Probieren Sie das TensorFlow-Musikgenerierungsprojekt "Magenta" von der Entwicklungsumgebung bis zur Songgenerierung aus.

Erstellen Sie einen Datensatz

Bevor Sie eine MIDI-Datei lernen, müssen Sie sie zunächst in ein Format namens Note Sequences konvertieren, damit sie von TensorFlow verarbeitet werden kann.

Führen Sie das folgende Skript aus. Beim Lesen einer fehlerhaften MIDI-Datei kann eine Fehlermeldung angezeigt werden. MIDI-Dateien, die nicht analysiert werden können, werden übersprungen, sodass dies sicher erscheint.


MIDI_DIRECTORY=<folder containing MIDI files. can have child folders.>

# TFRecord file that will contain NoteSequence protocol buffers.
SEQUENCES_TFRECORD=/tmp/notesequences.tfrecord

bazel run //magenta/scripts:convert_midi_dir_to_note_sequences -- \
--midi_dir=$MIDI_DIRECTORY \
--output_file=$SEQUENCES_TFRECORD \
--recursive


```

 Es sieht so aus, als würden Sie "convert_midi_dir_to_note_sequences.py" ausführen.

 Wenn die folgende Meldung angezeigt wird, ist der Vorgang abgeschlossen.

```
..............
INFO: Found 1 target...
Target //magenta/scripts:convert_midi_dir_to_note_sequences up-to-date:
  bazel-bin/magenta/scripts/convert_midi_dir_to_note_sequences
INFO: Elapsed time: 7.312s, Critical Path: 0.63s

(Unterlassung)

INFO:tensorflow:Could not parse 0 MIDI files.
INFO:tensorflow:Wrote 6 NoteSequence protos to '/tmp/notesequences.tfrecord'
```


# lernen

## Extrahieren Sie die Melodie
 Führen Sie `basic_rnn_create_dataset.py` aus.

 Dies ist ein Skript, das die Melodie aus den oben erstellten "Note Sequence-Daten" basierend auf der MIDI-Datei extrahiert.
 Die Ausgabe wird als "tfrecord" -Datei exportiert, die die "SequenceExampleprotos" enthält.

 Durch Laden des TensorFlow des `basic_rnn`-Modells können Sie die` SequenceExample-Protos` direkt in das Modell laden.

 In diesem Beispiel erstellen wir den Auswertungsdatensatz als zweite "tfrecord" -Datei.
 Sie kann jedoch weggelassen werden, indem die Flags "eval output" und "eval ratio" entfernt werden.

 Es ist in Ordnung, wenn die folgende Meldung angezeigt wird.


```
INFO: Found 1 target...
Target //magenta/models/basic_rnn:basic_rnn_create_dataset up-to-date:
  bazel-bin/magenta/models/basic_rnn/basic_rnn_create_dataset
INFO: Elapsed time: 0.573s, Critical Path: 0.01s

INFO: Running command line: bazel-bin/magenta/models/basic_rnn/basic_rnn_create_dataset '--input=/tmp/notesequences.tfrecord' '--output_dir=/tmp/basic_rnn/sequence_examples' '--eval_ratio=0.10'
INFO:tensorflow:

Completed.

INFO:tensorflow:Processed 6 inputs total. Produced 31 outputs.
INFO:tensorflow:DAGPipeline_RandomPartition_training_melodies_count: 29
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_melodies_discarded_too_long: 0
INFO:tensorflow:DAGPipeline_RandomPartition_eval_melodies_count: 2
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_melody_lengths_in_bars:
  [0,1): 10
  [1,3): 6
  [3,6): 17
  [6,7): 2
  [7,8): 1
  [8,10): 4
  [10,20): 21
  [20,30): 5
  [30,40): 6
  [50,100): 4
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_melodies_discarded_too_short: 35
INFO:tensorflow:DAGPipeline_Quantizer_sequences_discarded_because_multiple_time_signatures: 5
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_melodies_truncated: 0
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_polyphonic_tracks_discarded: 43
INFO:tensorflow:DAGPipeline_MonophonicMelodyExtractor_melodies_discarded_too_few_pitches: 10
```

 Wenn vervollständigt
 In `/ tmp / basic_rnn / sequence_examples /`
 Sie haben zwei Dateien, `training_melodies.tfrecord` und` eval_melodies.tfrecord`.
 Es scheint, dass "training_melodies.tfrecord" für das Training und "eval_melodies.tfrecord" für die Bewertung ist.





## Führen Sie das Trainingsskript aus

 Der Entwickler von Magenta hat das Skript erstellt.


```
$EXPERIMENT_DIR=/tmp/basic_rnn/logdir
```

 Geben Sie den Arbeitsordner an.


```
$HYPERPARAMETER_STRING=`{"rnn_layer_sizes":[50]}’
```

 Geben Sie Hyperparameter an.
 Es scheint, dass Sie die Größe des LSTM-Modells angeben können, indem Sie es wie folgt angeben.
 Für LSTM ist Folgendes hilfreich (Meisterwerk).

 [LSTM mit den neuesten Trends verstehen](http://qiita.com/t_Signull/items/21b82be280b46f467d1b)

 > LSTM (Long Short Term Memory) ist eine Art Modell oder Architektur für Zeitreihendaten (sequentielle Daten), die 1995 als Erweiterung von RNN (Recurrent Neural Network) erschien.

 > (Weggelassen)

 > Das größte Merkmal von LSTM ist, dass es langfristige Abhängigkeiten lernen kann, die mit herkömmlichem RNN nicht gelernt werden können.

```
$NUM_TRAINING_STEPS=20000
```

 Geben Sie die Anzahl der Schulungen an. Auf einem Mac nimmt es viel Zeit in Anspruch, daher halte ich es für eine gute Idee, es auf einige hundert zu reduzieren.


```
$TRAIN_DATA=/tmp/basic_rnn/sequence_examples/training_melodies.tfrecord
```

 Der Pfad der oben erzeugten Trainingsdaten wird beschrieben.

```
$EVAL_DATA=/tmp/basic_rnn/sequence_examples/eval_melodies.tfrecord
```

 Optional können Validierungsdaten parallel zu den Trainingsdaten angezeigt werden.

 Führen Sie nach dem Einstellen das Skript aus.

```
./run_basic_rnn_train.sh $EXPERIMENT_DIR $HYPERPARAMETER_STRING $NUM_TRAINING_STEPS $TRAIN_DATA [$EVAL_DATA]
```


 Die folgende Meldung wird angezeigt.

INFO: Found 1 target... Target //magenta/models/basic_rnn:basic_rnn_train up-to-date: bazel-bin/magenta/models/basic_rnn/basic_rnn_train INFO: Elapsed time: 0.544s, Critical Path: 0.00s INFO:tensorflow:hparams = {'rnn_layer_sizes': [50], 'decay_rate': 0.85, 'dropout_keep_prob': 0.5, 'batch_size': 128, 'decay_steps': 1000, 'clip_norm': 5, 'initial_learning_rate': 0.01, 'skip_first_n_losses': 0} Starting TensorBoard 28 on port 6006 (You can navigate to http://10.200.3.144:6006) INFO:tensorflow:Train dir: /tmp/melody_rnn/logdir/run1/train INFO:tensorflow:Starting training loop... INFO:tensorflow:global_step/sec: 0

(Unterlassung)

INFO:tensorflow:Global Step: 100 - Learning Rate: 0.01000 - Loss: 1.680 - Perplexity: 13.678 - Accuracy: 85.811 INFO:tensorflow:Training complete.



# Generiere ein Lied.

 Nach Abschluss der obigen Schulung werden die folgenden Dateien im Arbeitsverzeichnis "/ tmp / basic_rnn / logdir / run1 / train /" erstellt.

checkpoint model.ckpt-31 events.out.tfevents.1475664203.HTMac.local model.ckpt-31.meta graph.pbtxt model.ckpt-39 model.ckpt-15 model.ckpt-39.meta model.ckpt-15.meta model.ckpt-47 model.ckpt-23 model.ckpt-47.meta model.ckpt-23.meta


 Der Prüfpunkt scheint zum Speichern und Laden von Dateien in TensorFlow verwendet zu werden.
 Basic_RNN scheint einen Song mit dem letzten Checkpoint zu generieren (model.ckpt-47 im obigen Fall).


 Um einen Song zu generieren, müssen Sie dem Modell eine Startmelodie geben.
 Dies liegt daran, dass die Songgenerierung auf der Melodie basiert, den nächsten Sound immer mehr vorhersagt und den Song erweitert. Die vorzubereitende Melodie muss eine Mono-Melodie sein (mehrere Klänge klingen nicht zum gleichen Zeitpunkt).

 Sie können es beliebig oder als Beispiel erstellen
 `/ magenta / models / shared / primer.mid` ist ebenfalls verfügbar.

 Dieses Beispiel wird hier verwendet.

PRIMER_PATH=

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


 Die mindestens 3 Maßnahmen werden basierend auf primer.mid festgelegt.

 [Beispiel 1](https://clyp.it/iwkk1xg3)
 [Beispiel 2](https://clyp.it/jebdi2ny)

 Ich habe Mr. Sakanaction trainiert, aber ich konnte die Atmosphäre spüren.


# Schließlich

 Aufgrund meiner Kenntnisse in DeepLearning, meiner Kenntnisse in TensorFlow und mangelnder Englischkenntnisse kann ich einige Teile nicht lesen.
 Ich werde weiter studieren. .. ..

 Vielen Dank.


Recommended Posts

Das Musikgenerierungsprojekt "Magenta" von TensorFlow trainiert MIDI-Dateien und generiert Songs.
Versuchen wir das TensorFlow-Musikgenerierungsprojekt "Magenta" von der Entwicklungsumgebung bis zur Songgenerierung.
Lernen Sie Wasserstein GAN mit Keras-Modell und TensorFlow-Optimierung
[How to!] Lerne und spiele Super Mario mit Tensorflow !!