使用 Gekko 的大脑模块,我如何确定使用多少层和什么类型的层来解决深度学习问题?

Using Gekko's brain module, how do I determine how many layers and what type of layer to use to solve a deep learning problem?

我正在学习使用 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 的结果:

如果我将节点增加到 5 个,我会得到以下结果 b.layer(tanh=5)

不过,这个问题可能有多个答案。也许增加层数或改变激活函数。您也可以随时使用不同的求解器。寻找最佳网络架构本身就是一个优化问题。有人尝试用遗传算法算出来,例如:

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

数据驱动(黑盒)模型本质上存在 "Overfitting" 和 "Underfitting" 问题。 如果您在模型中提供太多自由度,它将完全适合您的 "Training" 数据集,但它不会很好地适合 "Validation" 数据集。

神经网络类型的模型也是如此。您提供的层数越多,模型越容易产生 "Overfitting."

有几种方法可以避免 "Overfitting"。

一般来说,您可以在 "Training set" 和 "Validation set," 之间平衡 "model errors" 在验证错误开始增加而训练错误不断减少时停止增加层数,或者反之亦然。