Usando o módulo cerebral de Gekko, como determino quantas camadas e que tipo de camada usar para resolver um problema de aprendizado profundo?

9

Estou aprendendo a usar o módulo cerebral de Gekko para aplicativos de aprendizado profundo.

Eu tenho criado uma rede neural para aprender a função numpy.cos () e depois produzir resultados semelhantes.

Fico bem quando os limites do meu treinamento são:

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

Mas o modelo desmorona quando tento estender os limites para:

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

O que preciso mudar na minha rede neural para aumentar a flexibilidade do meu modelo para que ele funcione para outros limites?

Este é o meu código:

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

Estes são os resultados para 2pi:

insira a descrição da imagem aqui

Estes são os resultados para 3pi:

insira a descrição da imagem aqui

Joseph
fonte

Respostas:

6

Eu obtenho o seguinte resultado se eu aumentar os nós para 5 b.layer(tanh=5)

Provavelmente existem várias respostas para essa pergunta, embora. Talvez aumentando o número de camadas ou alterando a função de ativação. Você sempre pode usar diferentes solucionadores também. Encontrar a melhor arquitetura de rede é um problema de otimização próprio. Algumas pessoas tentaram descobrir isso com algoritmos genéticos, por exemplo:

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

insira a descrição da imagem aqui

reyPanda
fonte
2

Os modelos controlados por dados (caixa preta) têm inerentemente problemas de "sobreajuste" e "sobrealimentação". Se você conceder muitos graus de liberdade em seu modelo, ele se encaixará perfeitamente no conjunto de dados "Treinamento", enquanto não se encaixará tão bem no conjunto de dados "Validação".

O mesmo para os modelos de rede Neural. Quanto mais camadas você der, mais fácil o modelo resultará em "Sobreajuste".

Existem várias maneiras de evitar o excesso de ajustes.

Geralmente, você pode equilibrar os "erros de modelo" entre "Conjunto de treinamento" e "Conjunto de validação", parando de aumentar as camadas no ponto em que o Erro de validação começa a aumentar enquanto o erro de treinamento continua diminuindo ou vice-versa.

Junho Park
fonte