Używając modułu mózgu Gekko, w jaki sposób mogę ustalić, ile warstw i jakiego rodzaju warstwy użyć, aby rozwiązać problem głębokiego uczenia się?

9

Uczę się korzystać z modułu mózgu Gekko do aplikacji do głębokiego uczenia się.

Konfigurowałem sieć neuronową, aby nauczyć się funkcji numpy.cos (), a następnie uzyskać podobne wyniki.

Dobrze się dopasowuję, gdy granice mojego treningu są następujące:

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

Ale model rozpada się, gdy próbuję rozszerzyć granice do:

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

Co muszę zmienić w mojej sieci neuronowej, aby zwiększyć elastyczność mojego modelu, aby działał on w innych granicach?

To jest mój kod:

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

Są to wyniki do 2pi:

wprowadź opis zdjęcia tutaj

Są to wyniki do 3pi:

wprowadź opis zdjęcia tutaj

Joseph
źródło

Odpowiedzi:

6

Otrzymam następujący wynik, jeśli zwiększę węzły do ​​5 b.layer(tanh=5)

Prawdopodobnie istnieje wiele odpowiedzi na to pytanie, tys. Może zwiększenie liczby warstw lub zmiana funkcji aktywacji. Zawsze możesz także użyć różnych solverów. Znalezienie najlepszej architektury sieci jest samo w sobie problemem optymalizacji. Niektórzy próbowali to rozgryźć za pomocą algorytmów genetycznych, na przykład:

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

wprowadź opis zdjęcia tutaj

reyPanda
źródło
2

Modele oparte na danych (czarna skrzynka) z natury mają problemy z „przeregulowaniem” i „niedopasowaniem”. Jeśli podasz zbyt wiele stopni swobody w swoim modelu, będzie on idealnie pasował do twojego zestawu danych „Treningowych”, a jednocześnie nie będzie dobrze pasował do zestawu danych „Sprawdzanie poprawności”.

To samo dotyczy modeli typu sieć neuronowa. Im więcej warstw podasz, tym łatwiejszy jest model w „Przeuczeniu”.

Istnieje kilka sposobów uniknięcia „przeuczenia”.

Zasadniczo można zrównoważyć „błędy modelu” między „zestawem treningowym” a „zestawem walidacyjnym”, zatrzymując zwiększanie warstw w punkcie, w którym błąd walidacji zaczyna się zwiększać, a błąd trenowania zmniejsza się, lub odwrotnie.

Junho Park
źródło