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