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

在此处输入图像描述

4

2 回答 2

6

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

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

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

在此处输入图像描述

于 2019-11-21T19:24:56.253 回答
3

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

神经网络类型的模型也是如此。您提供的层数越多,模型越容易导致“过度拟合”。

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

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

于 2019-11-22T17:35:38.070 回答