github资源地址:[Release-x86/x64]
上一篇:轻量级C++神经网络应用库CreativeLus:2、分类问题。案例:空间点在平面上2分类。
下一篇:轻量级C++神经网络应用库CreativeLus:4、CNN卷积神经网络。案例:(MNIST)手写数字识别。
案例3:复杂函数逼近
本章介绍以下几个主要内容,本章内容非常重要:
1、创建自定义结构的神经网络;
2、模型自调整介绍(不是调参);
3、自定义过程监控和输出。
本例问题描述
为表现神经网络的强大逼近能力,我们将【案例1:简单sin函数逼近】的问题升级,通过复杂的多输入多输出逼近问题,了解神经网络运作模式。
命题如下:
定义维度为4的输入向量
X = { x 1 , x 2 , x 3 , x 4 } , 其 中 x i ∈ [ − π , π ] X=\{x_1,x_2,x_3,x_4\},其中xi\in\mathbb [-\pi,\pi] X={
x1,x2,x3,x4},其中xi∈[−π,π]
x i xi xi取定义域内的随机值,通过映射 Γ ( X ) \Gamma(X) Γ(X),得到维度为4的输出向量 Y Y Y,即
Y = { y 1 , y 2 , y 3 , y 4 } = Γ ( X ) Y=\{y_1,y_2,y_3,y_4\} =\Gamma(X) Y={
y1,y2,y3,y4}=Γ(X)
= { s i n ( x 4 ) , c o s ( x 3 ) , m i n ( 0.1 e x 2 , 1 ) , m i n ( 1 / ( 1 + e ( − x 1 ) ) , 1 ) } =\{sin(x_4),cos(x_3),min(0.1e^{x_2},1),min(1/(1+e^{(-x_1)}),1)\} ={
sin(x4),cos(x3),min(0.1ex2,1),min(1/(1+e(−x1)),1)}
, 其 中 x i ∈ [ − π , π ] , y i ∈ [ − 1 , 1 ] 。 ,其中xi\in\mathbb [-\pi,\pi],yi\in\mathbb [-1,1] 。 ,其中xi∈[−π,π],yi∈[−1,1]。
从 [ − π , π ] [-\pi,\pi] [−π,π]的随机输入到 [ − 1 , 1 ] [-1,1] [−1,1]范围的输出,空间上输入输出维度之间相互交叉。构造适当的神经网络,通过训练,找到映射关系 Γ \Gamma Γ,并通过随机的输入,验证模型训练效果以及预测有效性。
- 映射关系 Γ \Gamma Γ,代码片段如下:
const Float rangA = -ConstPi * 1.0, rangB = ConstPi * 1.0;
Float x4 = 0, x1 = 0, x2 = 0, x3 = 0, y4 = 0, y1 = 0, y2 = 0, y3 = 0;
#define XData3 x1 = rand_f_a_b(rangA,rangB),x2 = rand_f_a_b(rangA,rangB),x3 = rand_f_a_b(rangA,rangB),x4 = rand_f_a_b(rangA,rangB)
#define YData3 y1 = sin(x4),y2 = cos(x3),y3 = min(exp(x2)*0.1,1),y4 = min((1.0/(1.0+exp(-x1))),1)
1、“创造性决定一切”,设计你自己的神经网络
话不多说,我们先看一下,为了本案的问题寻找逼近映射关系,我们“设计”了如下图的网络模型(5层,4输入,4输出模型结构)来解决上述问题。
- 作为处理逼近问题,勉强叫做设计,并把结构搞成这样,显然有点刻意了,但是为了演示,还是尽量做得复杂一点,美观一点。如果你也厌倦了单调的,千篇一律的模型结构。那接下来就是你大展身手的时候了,这一切都将源自于你的“创造力”。

- 图片是由CL自动生成的,可用鼠标左键和中建放大和缩小显示位置。
- 可以观察到,本模型我们用到了4种不同的激活函数:Sigmoid,Tanh,PReLu,LeakyReLu(关于以上4个函数的功能,请自行百度,在此不再论述),其次,每个神经元作为一个节点表示,链接着上一层(左侧的),又被下一层神经元链接(右侧的),自左向右传递。神经元的链接也并不是规律的,而是有选择性的链接。CL是面向对象建模,每个神经元都是一个独立个体,它知道自己是什么,能做什么。

- 下图,是带权重渲染的网络结构图:

最低0.47元/天 解锁文章
629

被折叠的 条评论
为什么被折叠?



