À l'aide du module cerveau de Gekko, comment puis-je déterminer le nombre de couches et le type de couche à utiliser pour résoudre un problème d'apprentissage en profondeur?

9

J'apprends à utiliser le module cérébral de Gekko pour des applications d'apprentissage en profondeur.

J'ai mis en place un réseau neuronal pour apprendre la fonction numpy.cos () et produire des résultats similaires.

J'obtiens un bon ajustement lorsque les limites de ma formation sont:

x = np.linspace(0,2*np.pi,100)

Mais le modèle s'effondre lorsque j'essaie d'étendre les limites à:

x = np.linspace(0,3*np.pi,100)

Que dois-je changer dans mon réseau de neurones pour augmenter la flexibilité de mon modèle afin qu'il fonctionne pour d'autres limites?

Voici mon code:

from gekko import brain
import numpy as np
import matplotlib.pyplot as plt

#Set up neural network 
b = brain.Brain()
b.input_layer(1)
b.layer(linear=2)
b.layer(tanh=2)
b.layer(linear=2)
b.output_layer(1)

#Train neural network
x = np.linspace(0,2*np.pi,100)
y = np.cos(x)
b.learn(x,y)

#Calculate using trained nueral network
xp = np.linspace(-2*np.pi,4*np.pi,100)
yp = b.think(xp)

#Plot results
plt.figure()
plt.plot(x,y,'bo')
plt.plot(xp,yp[0],'r-')
plt.show()

Ce sont des résultats à 2pi:

entrez la description de l'image ici

Ce sont des résultats à 3pi:

entrez la description de l'image ici

Joseph
la source

Réponses:

6

J'obtiens le résultat suivant si j'augmente les nœuds à 5 b.layer(tanh=5)

Il y a probablement plusieurs réponses à cette question, tho. Peut-être augmenter le nombre de couches ou changer la fonction d'activation. Vous pouvez également toujours utiliser différents solveurs. Trouver la meilleure architecture de réseau est un problème d'optimisation qui lui est propre. Certaines personnes ont essayé de le comprendre avec des algorithmes génétiques, par exemple:

https://arxiv.org/pdf/1808.03818.pdf

entrez la description de l'image ici

reyPanda
la source
2

Les modèles pilotés par les données (boîte noire) présentent intrinsèquement des problèmes de «sur-ajustement» et de «sous-ajustement». Si vous donnez trop de degrés de liberté à votre modèle, il s'intégrera parfaitement dans votre ensemble de données "Formation", alors qu'il ne s'intégrera pas aussi bien avec l'ensemble de données "Validation".

Idem pour les modèles de type Neural Net. Plus vous donnez de couches, plus les résultats du modèle sont faciles à réaliser.

Il existe plusieurs façons d'éviter le «sur-ajustement».

En règle générale, vous pouvez équilibrer les «erreurs de modèle» entre «l'ensemble d'apprentissage» et «l'ensemble de validation», en cessant d'augmenter les couches au moment où l'erreur de validation commence à augmenter tandis que l'erreur d'apprentissage continue de diminuer, ou vice versa.

Parc Junho
la source