使用 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" 在验证错误开始增加而训练错误不断减少时停止增加层数,或者反之亦然。
我正在学习使用 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" 在验证错误开始增加而训练错误不断减少时停止增加层数,或者反之亦然。