Regression 回归例子
学习资料:
导入模块¶
在上一节课程中,我么学习了如何利用Theano
定义神经网络的层类,我们设计了一个Layer
类来规划神经网络层的信息。
这节我们学习如何利用神经网络解决简单的回归问题。 首先,和之前所有的练习一样,我们引入需要使用的Python包:
与之前的代码不同的地方是我们在这里引入了matplotlib
这个工具包, 用来实现绘图及数据可视化。
大家可以利用我的视频教程来学习或复习 Matplotlib 这个工具: Matplotlib 数据可视化神器 Python。
定义层结构¶
接下来我们声明我们的Layer类。 对于神经网络的每个Layer, 它需要具备输入来源input
,输入神经元维度in_size
,输出神经元纬度out_size
, 和我们之前设计的神经元的激活函数activation_function
, 默认为None
。 这段代码和上节课一致,此处不再重复。
伪造数据¶
接下来,我们首先人工生成一个简单的带有白噪声的一维数据 y = x^2 - 0.5 + noise
。
然后,我们用散点图(Scatter)把它显示出来, 横轴是x_data
, 纵轴是y_data
。
显示结果:
搭建网络¶
然后,我们定义神经网络的输入与目标;
这里,T.dmatrix
意味着我使用的是float64的数据类型, 和我的输入数据一致。
接着我们设计我们的神经网络,它包括两层,构成1-10-1
的结构。 对于l1
我们的input_size
要和我们的x_data
一致,然后我们假设了该层有10个神经元,并且以relu
作为激活函数。 所以,l2
以l1.output
为输入,同时呢,它的输出为1维,和我们的y_data
保持一致,作为神经网络的输出层,我们采用默认的线性激活函数。
然后,我们定义一个cost
,也就是损失函数(cost/loss function),我们采用的是l2.outputs
神经网络输出与目标值y
的的平均平方差。
根据 cost
我们可以计算我们神经网络权值和偏置值的梯度(gradient), 这里Theano已经集成好了对应的函数:
有了以上的基本运算步骤后,我们就可以开始,利用梯度下降法训练我们的神经网络。 首先我们定义一个学习率 learning_rate
, 这个学习率的取值一般是根据数据及实验的经验估计的,它会对模型的收敛性造成一定的影响,一般倾向于采用较小的数值。
然后,我们定义train
这个函数来描述我们的训练过程,首先我们定义了函数的输入inputs=[x, y],
函数的输出为outputs=cost
, 同时更新网络的参数。
然后我们定义一个预测函数来输出我们最终的结果predict
.
训练¶
最后,我们就要开始真正的训练啦!我们要把神经网络训练1000次,同时呢每训练50次时就输出此时的误差(cost):
你大概会得到一下类似的结果:
结果显示我们的训练误差是在不断的减小的,也就是说我们的神经网络在一点一点的逼近目标值。 再下一小节中我们将学习使用matplotlib
来动态的显示我们训练的神经网络的预测结果。