依据之前博文中的神经网络理论做个简单的例子,对神经网络前向传播与反向传播算法有个深入理解,同时对神经网络计算细节有个清晰认识。
题目:上图的样本案例分3类,利用神经网络知识推算出一个未知坐标属于哪类
这里我准备用3层结构的神经网络层
一,
nn_params:初始化参数值。
首先进行参数随机初始化
eps = 0.0001 ;
Theta1=rand(4, 3) * (2*eps)- eps ;
Theta2=rand(3, 5) * (2*eps) - eps ;
initheta = [Theta1(:) ; Theta2(:)];
将initheta 传给nn_params 。
input_layer_size:输入层激励单元数。本例为2个单元
hidden_layer_size:隐藏层单元数。本例为4个单元
num_labels:输出层单元数。本例为3个单元
二,将theta1与theta2重组成对应矩阵
三,将最后分类情况向量化,向量化后即,1对应[1,0,0],2对应[0,1,0],3对应[0,0,1]。
四,前向传播算出第二,第三层的激活函数输出值。注意不要忘了增加偏量值。
五,正则化求出代价函数值,将2个参数矩阵的第一列移除,不参与正则化。
六,利用前向传播,反向传播算出梯度值。逐条数据计算。
七,对梯度值进行正则化,并把theta1,theta2向量化。
下面是本例中用到的函数