Utilizzando il modulo del cervello di Gekko, come posso determinare quanti livelli e quale tipo di livello utilizzare per risolvere un problema di apprendimento profondo?


9

Sto imparando a usare il modulo cerebrale di Gekko per applicazioni di apprendimento profondo.

Ho creato una rete neurale per apprendere la funzione numpy.cos () e quindi produrre risultati simili.

Ottengo una buona misura quando i limiti del mio allenamento sono:

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

Ma il modello cade a pezzi quando provo ad estendere i limiti a:

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

Cosa devo cambiare nella mia rete neurale per aumentare la flessibilità del mio modello in modo che funzioni per altri limiti?

Questo è il mio codice:

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()

Questi sono i risultati per 2pi:

inserisci qui la descrizione dell'immagine

Questi sono i risultati per 3pi:

inserisci qui la descrizione dell'immagine

Risposte:


6

Ottengo il seguente risultato se aumento i nodi a 5 b.layer(tanh=5)

Probabilmente ci sono più risposte a questa domanda, comunque. Magari aumentando il numero di livelli o modificando la funzione di attivazione. Puoi sempre usare anche diversi solutori. Trovare la migliore architettura di rete è un problema di ottimizzazione a sé stante. Alcune persone hanno cercato di capirlo con algoritmi genetici, ad esempio:

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

inserisci qui la descrizione dell'immagine


2

I modelli basati su dati (scatola nera) presentano intrinsecamente problemi di "sovralimentazione" e di "insufficienza". Se dai troppi gradi di libertà al tuo modello, questo si adatterà perfettamente al tuo set di dati "Formazione", mentre non si adatterà bene al set di dati "Convalida".

Lo stesso vale per il modello di rete neurale. Più strati dai, più facile sarà il modello nel "sovradimensionamento".

Esistono diversi modi per evitare un "overfitting".

In genere, è possibile bilanciare gli "errori del modello" tra "Set di addestramento" e "Set di convalida", interrompendo l'aumento dei livelli nel punto in cui l'errore di convalida inizia ad aumentare mentre l'errore di addestramento continua a diminuire, o viceversa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.