[PYTHON] J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent

Prédire le genre à partir du titre de la chanson

Je veux étudier RNN, mais je ne sais pas quoi faire, alors j'ai consulté mes aînés.

Wai "Senior, je veux étudier RNN en utilisant TensorFlow. Y a-t-il un bon sujet?" Senior "Bruyant. Je suis occupé donc je vous quitterai plus tard." Wai "..."

Prédisons le genre de musique à partir du titre de la chanson. .. .. (´ ・ ω ・ `)

Ensemble de données d'entrée

Il y a un élément appelé genre dans la liste des titres de chansons d'itunes. Il y a peut-être un titre de chanson de type Rock ou un motif de titre de chanson de type Pop.

Extraire les données d'iTunes et les enregistrer dans un fichier csv

train_data.csv


Ho!,2
Deuces Are Wild,2
575,4
films,4
KICKS!,2
Raise it all,4
Rien(movie ver.),4
Fille de moratoire,4
You've Got To Hide Your Love Away,0
Ordinary,5
Quoi,4
Chasse à l'épée soudainement,4
Borderline,4
Timber,4
M.I.Y.A.,2
Journée d'été 1993,4
broken bone,4

Un ensemble de données comme celui-ci. Données de l'enseignant 2259, données de test 565. Les nombres dans la colonne de droite correspondent au genre.

categories.csv


Classical,0
R&B,1
Alternative,2
Pop,3
Rock,4
Rap,5
Punk,6
Dance & House,7

Comme ça.

J'ai essayé de mettre en œuvre

Ceci est le code réel

Il semble que ce n'est pas correct d'analyser la morphologie du titre de la chanson, donc cette fois nous avons adopté Character RNN Entrez les données de série chronologique pour chaque caractère dans RNN pour apprendre les modèles de titre de chanson

input_data.py


 def data2id(self, data):
    self.__create_dict()
    data = [train.lower().replace(' ', '') for train in data]
    return [[[self.char_dict[train[i]]] if len(train) > i else [0] for i in range(self.max_length)] for train in data]
  

  def __create_dict(self, data_dir ='../data/'):
    data = self.__create_batchs(data_dir)
    data += self.__create_batchs(data_dir, test=True)
    sings = [d[0] for d in data]
    word = ''.join(sings).lower().replace(' ','')
    word_uniq = list(set(word))
    self.char_dict = {k:i for i,k in enumerate(word_uniq)}

Dans cette partie, le titre de la chanson est converti en une forme qui peut être transmise au réseau en attribuant un identifiant à chaque caractère.

main.py


def cell():
    return tf.contrib.rnn.BasicRNNCell(num_units=NODE_NUM, activation=tf.nn.tanh) #Cellule de couche intermédiaire
cells = tf.contrib.rnn.MultiRNNCell([cell() for _ in range(NUM_LAYER)])
outputs, states = tf.nn.dynamic_rnn(cell=cells, inputs=x, dtype=tf.float32, time_major=False)

Puisque le titre de la chanson est de longueur variable, utilisez dynamic_rnn. La couche intermédiaire a 128 unités et deux couches sont empilées (super approprié), et la cellule est BasicRNN.

résultat

C'est vrai. .. Ouaip. .. Je ne peux même pas le voir. Les chansons de mes itunes sont d'abord orientées vers le rock. De plus, il est assez difficile pour les humains de deviner le genre à partir du titre de la chanson. Vous pouvez donc vous attendre au résultat, non?

[TRAIN] loss : 1.349962, accuracy : 0.656250
[TEST loss : 1.369359, accuracy : 0.571681
{'Classical': 0.0, 'R&B': 0.0, 'Alternative': 0.0, 'Pop': 0.0, 'Rock': 1.0, 'Rap': 0.0, 'Punk': 0.0, 'Dance & House': 0.0}

J'ai essayé d'apprendre dans une certaine mesure. Les lignes 1 et 2 sont Train, Test loss et taux de réponse correct, La troisième ligne est le rapport entre le résultat réel de la prédiction du réseau et les données de test. Oui, j'insiste sur le fait que tout est Rock. Comme il n'y a presque aucune corrélation entre le titre de la chanson et le genre, insister sur le fait qu'ils sont tous Rock entraînera une perte minimale. (Parce que les données sont biaisées vers Rock ...) J'aurais aimé avoir un meilleur ensemble de données. ..

Impressions

C'était une pratique d'utilisation des API liées à RNN! !! Je pense que la mise en œuvre est erronée, alors je vous serais reconnaissant si vous pouviez m'apprendre diverses choses! !! !!

Recommended Posts

J'ai essayé de prédire le genre de musique à partir du titre de la chanson sur le réseau neuronal récurrent
J'ai essayé de classer la musique en majeur / mineur sur Neural Network
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
Obtenez le titre de la chanson à partir du titre de la vidéo que vous avez chanté
J'ai essayé de mettre en œuvre le modèle de base du réseau neuronal récurrent
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai couru le réseau neuronal sur le FPGA réel
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de prédire la détérioration de la batterie lithium-ion en utilisant le SDK Qore
[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
J'ai essayé d'afficher le degré d'infection par le virus corona sur la carte thermique Seaborn
J'ai essayé de prédire le nombre de personnes infectées par le virus corona en tenant compte de l'effet de s'abstenir de sortir
Introduction à la création d'IA avec Python! Partie 2 J'ai essayé de prédire le prix de l'immobilier dans la ville de Boston avec un réseau neuronal
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de prédire le match de la J League (analyse des données)
L'histoire de la création d'un réseau neuronal de génération musicale
J'ai essayé de résumer quatre méthodes d'optimisation de réseau neuronal
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé de prédire la victoire ou la défaite de la Premier League en utilisant le SDK Qore
J'ai essayé de faciliter la modification du paramètre du proxy authentifié sur Jupyter
J'ai essayé de trouver l'entropie de l'image avec python
Je veux changer la destination du lien symbolique de / lib64 de / usr / lib64 à / my-lib64 sur CentOS
J'ai essayé d'obtenir les informations de localisation du bus Odakyu
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
Analyse des émotions avec traitement du langage naturel! J'ai essayé de prédire l'évaluation à partir du texte de l'avis
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de prédire l'infection d'une nouvelle pneumonie en utilisant le modèle SIR: ☓ Wuhan edition ○ Hubei province edition
J'ai essayé de résumer les langues que les débutants devraient désormais apprendre par but
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
J'ai essayé de trier les objets de l'image du plat de steak-① Détection d'objets
J'ai essayé de lancer le cluster ipython au minimum sur AWS
J'ai essayé un réseau de neurones convolutifs (CNN) avec un tutoriel TensorFlow sur Cloud9-Classification des images manuscrites-
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.
J'ai essayé de prédire les ventes de logiciels de jeux avec VARISTA en me référant à l'article du Codexa
J'ai créé mon propre réseau de neurones à propagation directe à 3 couches et j'ai essayé de comprendre le calcul en profondeur.
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai essayé de trier les objets de l'image du plat de steak-② Tri des numéros de chevauchement
Je souhaite extraire les informations d'étiquette (titre et artiste) d'un fichier de musique (flac, wav).
J'ai essayé de prédire les hauts et les bas du cours de clôture du cours de l'action de Guru Navi en utilisant TensorFlow (progression)
J'ai essayé de créer un environnement de MkDocs sur Amazon Linux
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
J'ai essayé d'enregistrer une station sur la plateforme IoT "Rimotte"