网络结构采用两层BP网:其中隐层单元数为2 ;神经元激励函数用sigmoid函数
结构图如下所示:
红色(收敛过程) 步长系数 0.8 稳定系数 0.8 sigmoid函数斜率为1
经学习后的权矩阵(其中w[0][0] w[0][1] w[0][2]分别表示神经元1、2、3的偏差b1、b2、b3):
w[0][0] = 2.930361 w[0][1] = -3.579205 w[0][2] = 4.659665
w[1][0] = 6.130275 w[1][1] = 6.569888 w[1][2] = -9.740614
w[2][0] = -5.878284 w[2][1] = -6.574233 w[2][2] = 9.937957
蓝色(不收敛过程)步长系数8 稳定系数0.1 sigmoid函数斜率为0.5
经学习后的权矩阵(其中w[0][0] w[0][1] w[0][2]分别表示神经元1、2、3的偏差b1、b2、b3):
w[0][0] = -0.952549 w[0][1] = 1.780068 w[0][2] = 1.343411
w[1][0] = -15.287239 w[1][1] = -18.513069 w[1][2] = -6.578238
w[2][0] = -15.947301 w[2][1] = -19.173033 w[2][2] = -10.848843
刚开始不知道如何利用训练次数与相应误差来描述相关曲线,我又不熟悉MATLAB,只是近些日子开始接触OpenGL,想利用自己近些天所学,来完成这个曲线的描绘,思考了一下思路,还是比较简单的。只是每次训练保存一组数据(误差,训练次数),并以此为坐标在坐标轴中描出相应的点,使得结果看起来像条连续的曲线,并且不需要打的数组来保存每次生成的数据坐标(误差,训练次数),只需将误差值映射到y坐标轴上,将训练次数映射到x坐标轴上,其核心思想只用了
glBegin();
glVertex2f(训练次数映射到x上的值,误差映射到y上的值);
glEnd();
就这么简单,实现了不错的效果,而且是自己编程实现的。主要是感觉自己渐渐有了用程序来表达自己想法的思路,甚喜,继续努力!