Используя модуль мозга Гекко, как определить, сколько слоев и какой тип слоя использовать для решения проблемы глубокого обучения?

9

Я учусь использовать модуль мозга Gekko для приложений глубокого обучения.

Я настраивал нейронную сеть, чтобы изучить функцию numpy.cos () и затем получить схожие результаты.

Я хорошо подхожу, когда границы моих тренировок:

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

Но модель разваливается, когда я пытаюсь расширить границы:

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

Что мне нужно изменить в моей нейронной сети, чтобы повысить гибкость моей модели, чтобы она работала для других границ?

Это мой код:

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

Это результаты до 2pi:

введите описание изображения здесь

Это результаты до 3pi:

введите описание изображения здесь

Джозеф
источник

Ответы:

6

Я получаю следующий результат, если я увеличу узлы до 5 b.layer(tanh=5)

Есть, вероятно, несколько ответов на этот вопрос, хотя. Возможно увеличение количества слоев или изменение функции активации. Вы всегда можете использовать разные решатели тоже. Поиск лучшей сетевой архитектуры - это отдельная проблема оптимизации. Некоторые люди пытались выяснить это с помощью генетических алгоритмов, например:

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

введите описание изображения здесь

reyPanda
источник
2

Модели, управляемые данными (черный ящик), по своей природе имеют проблемы «переоснащения» и «переоценки». Если вы дадите слишком много степеней свободы в вашей модели, она отлично впишется в ваш набор данных «Обучение», но не будет хорошо вписываться в набор данных «Проверка».

То же самое для моделей нейронной сети. Чем больше слоев вы дадите, тем легче модель получит «переоснащение».

Есть несколько способов избежать «переоснащения».

Как правило, вы можете сбалансировать «ошибки модели» между «Обучающим набором» и «Валидационным набором», прекратив увеличивать слои в точке, когда Ошибка Валидации начинает увеличиваться, в то время как ошибка обучения продолжает уменьшаться, или наоборот.

Junho Park
источник