[PYTHON] J'ai fait apprendre à RNN l'onde de péché et j'ai essayé de prédire: l'ajustement des paramètres hyper

0. Grosso modo

1. Configuration

Il utilise essentiellement la même configuration réseau que l'article précédent (http://qiita.com/yuyakato/items/ab38064ca215e8750865). De plus, les valeurs indiquées dans "3.3. Hyper paramètres" sont les valeurs de base des hyper paramètres.

Nom de variable sens valeur
num_of_input_nodes Nombre de nœuds dans la couche d'entrée 1 nœud
num_of_hidden_nodes Nombre de nœuds de couche masqués 2 nœuds
num_of_output_nodes Nombre de nœuds dans la couche de sortie 1 nœud
length_of_sequences Longueur de séquence RNN 50 étapes
num_of_training_epochs Nombre de répétitions d'apprentissage 2,000 fois
num_of_prediction_epochs Nombre de répétitions de la prédiction 100 fois
size_of_mini_batch Nombre d'échantillons par mini-lot 100 échantillons
learning_rate Taux d'apprentissage 0.1
forget_bias (Je ne suis pas sûr) 1.0 (valeur par défaut)

2. Code source, notebook

Le code source utilisé pour l'apprentissage / la prédiction, le bloc-notes qui a généré les données d'entraînement et le bloc-notes utilisé pour tracer les résultats sont disponibles sur GitHub. Veuillez vous y référer pour le code source et les valeurs spécifiques.

https://github.com/nayutaya/tensorflow-rnn-sin/tree/20160517/ex2

3. Réglage des hyper paramètres

3.1. Num_of_hidden_nodes: Nombre de nœuds de couche cachés

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque le nombre de nœuds de couche cachés passe de 1 à 4. Si le nombre de nœuds de couche cachés est «1», vous pouvez voir qu'il est complètement imprévisible. De plus, si le nombre de nœuds dans la couche cachée est important, il semble que de bons résultats ne seront pas toujours obtenus. En regardant le graphique des fonctions de perte, plus il y a de nœuds dans la couche cachée, moins la perte finale est importante.

No Nombre de nœuds de couche masqués Temps d'apprentissage / estimé
1 1 3m53.845s
2 2 3m30.844s
3 3 4m36.324s
4 4 5m30.537s

output_hidden.png

loss_hidden.png

3.2. Length_of_sequences: longueur de séquence RNN

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque la longueur de séquence de RNN est changée en "30", "40", "50", "60" et "70". Les données d'apprentissage cette fois sont une onde sinueuse avec 50 pas par cycle, mais on peut voir que même si elle est inférieure à un cycle, elle peut être suffisamment prédite.

No Longueur de séquence RNN Temps d'apprentissage / estimé
1 30 2m29.589s
2 40 2m58.636s
3 50 3m30.844s
4 60 4m25.459s
5 70 5m38.550s

output_seq.png

loss_seq.png

3.3. Num_of_training_epochs: nombre d'itérations d'entraînement

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque le nombre de répétitions d'entraînement passe à 1 000, 2 000 et 3 000. Dans le cas de 3 000 fois, le résultat de la fonction de perte fluctue d'environ 1 600 fois. Le résultat de la prédiction n'est pas non plus bon.

No Nombre de répétitions d'apprentissage Temps d'apprentissage / estimé
1 1,000 fois 2m10.783s
2 2,000 fois 3m30.844s
3 3,000 fois 6m17.675s

output_epoch.png

loss_epoch.png

3.4. Size_of_mini_batch: nombre d'échantillons par mini-lot

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque le nombre d'échantillons par mini-lot est changé en «50», «100» et «200». Il n'y a pas de différence notable, mais fondamentalement, il semble que plus le nombre d'échantillons est élevé, meilleurs sont les résultats.

No Nombre d'échantillons par mini-lot Temps d'apprentissage / estimé
1 50 4m25.032s
2 100 3m30.844s
3 200 4m59.550s

output_batch.png

loss_batch.png

3.5. Learning_rate: taux d'apprentissage

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque le taux d'apprentissage transmis à l'optimiseur est changé en «0,02», «0,1» et «0,5». Dans le cas des taux d'apprentissage «0,02» et «0,5», il ne peut pas être prédit correctement. De plus, dans le cas du taux d'apprentissage "0,5", le résultat de la fonction de perte fluctue immédiatement après l'apprentissage.

No Taux d'apprentissage Temps d'apprentissage / estimé
1 0.02 3m46.852s
2 0.1 3m30.844s
3 0.5 4m39.136s

output_learning.png

loss_learning.png

3.6. forget_bias

En fait, le graphique de la fonction de perte et le résultat de la prédiction lorsque le paramètre forget_bias de BasicLSTMCell, qui n'est pas bien compris, est changé en 0.25, 0.5, 1.0 (valeur par défaut) est affiché ci-dessous. indiquer. Dans le cas de "0,25", ce n'est pas prévisible.

No forget_bias Temps d'apprentissage / estimé
1 0.25 4m27.725s
2 0.5 4m27.089s
3 1.0 3m30.844s

output_forget.png

loss_forget.png

3.7. Optimiseur

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque l'optimiseur utilisé pour l'optimisation est passé de Gradient Descent Optimizer à ʻAdam Optimizer. ʻAdam Optimizer a une réduction des pertes plus rapide et une valeur finale inférieure, mais il vibre violemment. Il est difficile d'arrêter d'apprendre.

No optimiseur Temps d'apprentissage / estimé
1 GradientDescentOptimizer 3m30.844s
2 AdamOptimizer 4m46.116s

output_optimizer.png

loss_optimizer.png

3.8. Cellule RNN

Le graphique ci-dessous montre les résultats de prédiction et la fonction de perte lorsque la cellule RNN passe de «BasicLSTMCell» à «GRUCell». Il n'y avait pas beaucoup de différence.

No Cellule RNN Temps d'apprentissage / estimé
1 BasicLSTMCell 3m30.844s
2 GRUCell 4m53.831s

output_cell.png

loss_cell.png

4. Plans futurs

Je voudrais essayer ce qui se passerait si j'apprenais et prévoyais des données plus réalistes (cours des actions, devises, etc.).

Recommended Posts

J'ai fait apprendre à RNN l'onde de péché et j'ai essayé de prédire: l'ajustement des paramètres hyper
J'ai fait apprendre à RNN la vague de péché et j'ai essayé de prédire
〇✕ J'ai fait un jeu
J'ai essayé de faire LINE BOT avec Python et Heroku
J'ai essayé de faire un classement en grattant l'équipe des membres de l'organisation
Prédiction des ondes sinusoïdales à l'aide de RNN dans la bibliothèque d'apprentissage en profondeur Keras
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai fait un texte Python
J'ai fait un robot discord
J'ai créé une caméra réseau simple en combinant ESP32-CAM et RTSP.
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
J'ai créé un site d'apprentissage C ++
J'ai fait un Line-bot avec Python!
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait une loterie avec Python.
J'ai créé un script de traduction basé sur CUI
Prédiction de l'onde de péché avec keras
J'ai créé un démon avec Python
Prédiction des ondes de Sin (retour) avec Pytorch
4/22 prédiction de l'onde de péché avec keras
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres