[PYTHON] Le projet de génération de musique "Magenta" réalisé par TensorFlow entraîne des fichiers MIDI et génère des chansons.

introduction

Dans cet article, nous allons préparer l'environnement de développement de Magenta, apprendre le fichier MIDI à portée de main et créer un morceau. Il est conforme au README RNN de base de magenta, vous pouvez donc le lire.

Veuillez noter qu'il y a des points peu clairs tels que les termes. Veuillez vous référer à cet article pour la préparation de l'environnement de développement.

Essayez le projet de génération de musique TensorFlow "Magenta" du réglage de l'environnement de développement à la génération de morceaux.

Créer un jeu de données

Avant d'apprendre un fichier MIDI à portée de main, vous devez d'abord le convertir dans un format appelé Séquences de notes afin qu'il puisse être géré par TensorFlow.

Exécutez le script suivant. Vous pouvez obtenir une erreur lors de la lecture d'un fichier MIDI malformé. Les fichiers MIDI qui ne peuvent pas être analysés sont ignorés, donc cela semble sûr.


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


```

 Il semble que vous exécutiez `convert_midi_dir_to_note_sequences.py`.

 Si le message suivant s'affiche, le processus est terminé.

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

(Omission)

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


# apprendre

## Extraire la mélodie
 Exécutez `basic_rnn_create_dataset.py`.

 Il s'agit d'un script qui extrait la mélodie des «données de séquence de notes» créées ci-dessus à partir du fichier MIDI.
 La sortie est exportée sous forme de fichier `tfrecord` contenant les` SequenceExampleprotos`.

 Le chargement du TensorFlow du modèle `basic_rnn` vous permet de charger le` protos SequenceExample` directement dans le modèle.

 Dans cet exemple, nous allons créer l'ensemble de données d'évaluation en tant que deuxième fichier `tfrecord`.
 Cependant, il peut être omis en supprimant les indicateurs ʻeval output` et ʻeval ratio`.

 C'est OK si le message suivant apparaît.


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

 Quand fini
 Dans `/ tmp / basic_rnn / sequence_examples /`
 Vous aurez deux fichiers, `training_melodies.tfrecord` et ʻeval_melodies.tfrecord`.
 Il semble que «training_melodies.tfrecord» soit pour l'entraînement et «eval_melodies.tfrecord» pour l'évaluation.





## Exécutez le script de formation

 Le développeur de Magenta a créé le script.


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

 Spécifiez le dossier de travail.


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

 Spécifiez les hyper paramètres.
 Il semble que vous puissiez spécifier la taille du modèle LSTM en le spécifiant comme ceci.
 Pour LSTM, ce qui suit sera utile (chef-d'œuvre).

 [Comprendre le LSTM-avec les tendances récentes](http://qiita.com/t_Signull/items/21b82be280b46f467d1b)

 > LSTM (Long short-term memory) est une sorte de modèle ou d'architecture de données de séries temporelles (données séquentielles) apparu en 1995 comme une extension de RNN (Recurrent Neural Network).

 > (Omis)

 > La principale caractéristique de LSTM est qu'il peut apprendre des dépendances à long terme qui ne peuvent pas être apprises par RNN conventionnel.

```
$NUM_TRAINING_STEPS=20000
```

 Précisez le nombre de formations. Cela prend beaucoup de temps sur un Mac, donc je pense que c'est une bonne idée de le réduire à quelques centaines.


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

 Le chemin des données d'apprentissage générées ci-dessus est décrit.

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

 En option, il semble que les données de validation puissent être affichées en parallèle avec les données d'entraînement.

 Après la configuration, exécutez le script.

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


 Le message suivant apparaîtra.

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

(Omission)

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



# Générez une chanson.

 Lorsque la formation ci-dessus est terminée, les fichiers suivants seront créés dans le répertoire de travail `/ tmp / basic_rnn / logdir / run1 / train /`.

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


 Le point de contrôle semble être utilisé pour enregistrer et charger des fichiers dans TensorFlow.
 Basic_RNN semble générer une chanson en utilisant le dernier point de contrôle (model.ckpt-47 dans le cas ci-dessus).


 De plus, pour générer un morceau, vous devez donner au modèle une mélodie de départ.
 C'est parce que la génération de chanson est basée sur la mélodie, prédisant de plus en plus le prochain son et étendant la chanson. La mélodie à préparer doit être une mélodie monophonique (plusieurs sons ne retentissent pas au même moment).

 Vous pouvez le créer de manière arbitraire, ou comme échantillon
 `/ magenta / models / shared / primer.mid` est également disponible.

 Cet exemple est utilisé ici.

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


 Les 3 mesures minimales sont fixées sur la base de primer.mid.

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

 J'ai formé M. Sakanaction, mais je pouvais sentir l'atmosphère.


# finalement

 En raison de ma connaissance de DeepLearning, de ma connaissance de TensorFlow et de mon manque de capacité de lecture en anglais, il y a certaines parties que je ne peux pas lire.
 Je vais continuer à étudier. .. ..

 Merci beaucoup.


Recommended Posts

Le projet de génération de musique "Magenta" réalisé par TensorFlow entraîne des fichiers MIDI et génère des chansons.
Essayons le projet de génération de musique TensorFlow "Magenta" du réglage de l'environnement de développement à la génération de chansons.
Découvrez Wasserstein GAN avec le modèle Keras et l'optimisation TensorFlow
[Comment!] Apprenez et jouez à Super Mario avec Tensorflow !!