[PYTHON] Composez avec un réseau neuronal! Run Magenta

Qu'est-ce que le magenta

L'autre jour, un nouveau projet appelé Magenta de Google a ouvert sur Github. https://github.com/tensorflow/magenta

Magenta est un projet visant à générer de l'art et de la musique à l'aide d'un réseau neuronal.

Il vise à faire évoluer la créativité de l'apprentissage automatique et à devenir une communauté d'artistes et d'apprentissage automatique.

Réseau de neurones récurrent à composer

En tant que premier Magenta, un modèle du réseau neuronal récurrent (RNN) qui le compose a été publié. Il intègre une technique appelée LSTM (Long Short-Term Memory). Selon le site officiel de magenta (http://magenta.tensorflow.org/)

It’s purposefully a simple model, so don’t expect stellar music results. We’ll post more complex models soon. Il s'agit d'un modèle volontairement simplifié et vous ne pouvez pas vous attendre à faire de la musique exceptionnelle. Cependant, nous continuerons à publier des modèles plus complexes.

Il est donc préférable d'exécuter ce modèle en guise d'introduction.

Préparation

Je suis dans un environnement Ubuntu. Vous avez besoin d'un Mac ou Linux car vous avez besoin de Tensorflow, qui n'est pas compatible avec Windows.

Clonez le magenta depuis Github et installez Tensorflow et l'outil de construction bazel.

Construire un modèle de composition

Maintenant, construisons réellement le modèle de composition à partir d'ici.

Pour construire le modèle, vous avez besoin de données MIDI contenant la mélodie du morceau. Si vous ne disposez pas de données MIDI, il a été recommandé de les obtenir sur http://www.midiworld.com/files/142/. ~~ Il vaut mieux utiliser une seule donnée MIDI. Pour une raison quelconque, cela ne fonctionnait pas si je le faisais avec trois. ~~ (Il semble que certains fichiers MIDI peuvent être utilisés et d'autres ne peuvent pas être utilisés.) Cette fois, j'ai mis le fichier midi dans un répertoire appelé / tmp / midi

De là, vous pouvez construire un modèle de composition et créer du MIDI en tapant des commandes dans le terminal (Ctrl + Alt + T pour ubuntu). Le contenu est fait en Python, mais je ne joue pas vraiment avec le code.

Commencez par convertir le fichier MIDI au format tfrecord utilisé par Tensorflow

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

Ensuite, générez deux fichiers tfrecord à partir du fichier tfrecord généré. Ces données sont divisées en données d'entraînement (données de train) et données d'évaluation (données d'évaluation). Seules les données d'entraînement sont utilisées cette fois.

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

Nous allons apprendre RNN en utilisant les données de formation. num_training_steps est le nombre de formations, veuillez le réduire si cela prend trop à 20000. Ma machine n'était pas très bonne, alors je l'ai réglée sur 1000. Cependant, il semble que l'état RNN soit enregistré 10 fois chacun, même pendant l'apprentissage, il est donc possible de générer du MIDI.

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

Une fois cela fait, le modèle de composition était complet.

Génération de fichier MIDI de composition

Maintenant, avant de générer enfin un fichier MIDI, nous devons préparer un autre fichier MIDI. Parce que RNN apprend le flux de la mélodie à partir de fichiers MIDI. En d'autres termes, j'apprends que "cette mélodie est devant, donc ce son ne viendra pas après". Par conséquent, s'il n'y a pas de mélodie devant elle, la mélodie qui la suit ne peut pas être créée. Vous avez besoin d'un fichier midi contenant cette mélodie. Cette fois, j'ai créé une mélodie d'une mesure et l'ai placée dans / tmp avec le nom primer.mid.

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

Cette commande créera 16 fichiers midi dans / tmp / basic_rnn_generated. Chaque mélodie prime.mid est suivie d'une mélodie d'environ 4 mesures.

Ce n'était pas une très bonne mélodie

Voici la mélodie créée https://soundcloud.com/ig4osq8tqokz/magenta1

Cela ne s'est pas avéré être une très bonne mélodie. Cela peut dépendre de l'accompagnement, mais ...

La raison pour laquelle ce n'était pas bon ・ En premier lieu, le modèle est un tel gars -Le fichier MIDI utilisé comme données d'entraînement n'était pas bon (à cet égard, je n'ai pas utilisé le fichier MIDI contenant uniquement la mélodie) ・ Moins d'apprentissage

Cependant, je vais le faire avec soin pour le moment.

Et

Il faut beaucoup de temps pour apprendre. Il faut 1 minute pour chaque morceau MIDI pour apprendre 10 fois. Peut-il être amélioré en utilisant le GPU (même si je ne l'ai pas en premier lieu)?

Recommended Posts

Composez avec un réseau neuronal! Run Magenta
Expérimentez avec divers algorithmes d'optimisation sur le réseau neuronal
Implémenter un réseau neuronal à 3 couches
Entraînez les données MNIST avec PyTorch en utilisant un réseau neuronal
Réseau de neurones avec Python (scikit-learn)
3. Distribution normale avec un réseau neuronal!
Réseau de neurones commençant par Chainer
4. Entourez les paramètres avec un réseau neuronal!
Créez une application Web qui reconnaît les nombres avec un réseau neuronal
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Réseau neuronal avec OpenCV 3 et Python 3
Implémentation d'un réseau de neurones à deux couches 2
Modèle de classification simple avec réseau neuronal
Qu'est-ce que le réseau neuronal convolutif?
Ecrire un réseau résiduel avec TFLearn
[TensorFlow] [Keras] Construction d'un réseau neuronal avec Keras
J'ai essayé de mettre en œuvre un réseau de neurones à deux couches
Prédire les données de séries chronologiques avec un réseau neuronal
Persister le réseau de neurones construit avec PyBrain
Exécutez une application Web Python avec Docker
2. Écart moyen et standard avec le réseau neuronal!
Créez un classificateur avec un taux de reconnaissance de l'écriture manuscrite de 99,2% à l'aide du réseau neuronal convolutif TensorFlow
Apprentissage par renforcement 10 Essayez d'utiliser un réseau neuronal formé.
Visualisez la couche interne du réseau neuronal
Vérification de la normalisation des lots avec un réseau neuronal multicouche
Créez un tableau de bord pour les appareils réseau avec Django!
Compilez et exécutez Rust avec une seule commande
Réseau neuronal paramétrique
Exécutez un pipeline de machine learning avec Cloud Dataflow (Python)
L'histoire de la création d'un réseau neuronal de génération musicale
environnement en ligne de serveur de code (2) Créer un réseau virtuel avec Boto3
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Implémentation d'un réseau de neurones convolutifs utilisant uniquement Numpy
Exécuter un fichier Python avec une importation relative dans PyCharm
Je veux faire fonctionner un ordinateur quantique avec Python
Exécutez Python avec VBA
Exécutez prepDE.py avec python3
Format A4 avec python-pptx
Configurer un environnement de test automatique du navigateur qui peut exécuter Selenium + Pytest avec Docker Compose
Implémenter un réseau neuronal convolutif
Exécutez Blender avec python
Implémenter le réseau neuronal à partir de zéro
Expérience de réseau de neurones pliable
J'ai essayé un réseau de neurones convolutifs (CNN) avec un tutoriel TensorFlow sur Cloud9-Classification des images manuscrites-
Décorer avec un décorateur
Exécutez iperf avec python
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
Un exemple de python pour apprendre XOR avec un algorithme génétique sur un réseau neuronal
Un diagramme de réseau a été créé avec les données du COVID-19.
Classification d'images avec un réseau de neurones auto-fabriqué par Keras et PyTorch
Essayez de créer un réseau de neurones en Python sans utiliser de bibliothèque
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
Construction d'un réseau neuronal qui reproduit XOR par Z3
[Recherche causale / inférence causale] Implémentez un réseau Basian avec des données Titanic
J'ai fait un générateur de réseau neuronal qui fonctionne sur FPGA