使用Gekko的大脑模块,我如何确定用于解决深度学习问题的层数和类型?


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的结果:

在此处输入图片说明

Answers:


6

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

这个问题可能有多个答案。也许增加层数或更改激活功能。您也可以始终使用其他求解器。寻找最佳的网络体系结构本身就是一个优化问题。有些人试图用遗传算法来解决这个问题,例如:

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

在此处输入图片说明


2

数据驱动(黑匣子)模型固有地存在“过度拟合”和“不足拟合”问题。如果您给模型提供了太多的自由度,它将完全适合您的“训练”数据集,而不适用于“验证”数据集。

与神经网络类型的模型相同。赋予的层越多,模型越容易产生“过度拟合”。

有几种方法可以避免“过度拟合”。

通常,您可以在“训练集”和“验证集”之间平衡“模型误差”,在验证误差开始减小而训练误差持续减小的时候,停止增加层,反之亦然。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.