多层感知机逼近异或逻辑

网络结构采用两层BP网:其中隐层单元数为2 ;神经元激励函数用sigmoid函数

结构图如下所示:

 


   红色(收敛过程)  步长系数 0.8 稳定系数 0.8 sigmoid函数斜率为1

经学习后的权矩阵(其中w[0][0] w[0][1] w[0][2]分别表示神经元123的偏差b1b2b3)

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]分别表示神经元123的偏差b1b2b3)

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();

就这么简单,实现了不错的效果,而且是自己编程实现的。主要是感觉自己渐渐有了用程序来表达自己想法的思路,甚喜,继续努力!

 

异或逻辑门是一种多输入单输出的逻辑门,输出结果为两个输入中只有一个为1时为1,否则为0。由于异或逻辑门不是线性可分的,无法使用单层感知机实现,需要使用多层感知机(MLP)。 以下是使用多层感知机实现异或逻辑门的算法步骤: 1. 定义输入和输出:假设输入为两个二进制数x1和x2,输出为逻辑值y。 2. 构建多层感知机模型:模型由输入层、隐藏层和输出层组成。假设隐藏层有两个神经元,每个神经元的激活函数为sigmoid函数,输出层的激活函数为符号函数。 3. 初始化权重和偏置:使用随机数初始化权重和偏置,使用较小的值可以加快模型收敛速度。 4. 前向传播:将输入信号x传递到隐藏层,然后经过激活函数处理,输出结果作为输入信号传递到输出层,再经过激活函数处理,得到输出结果y。 5. 计算误差:将输出结果与真实结果相比较,计算误差值。 6. 反向传播:使用误差值反向传播,更新权重和偏置,使得模型的预测结果与真实结果尽可能接近。 7. 训练模型:重复进行前向传播、误差计算和反向传播,训练模型,直到模型的预测结果与真实结果接近。 8. 测试模型:对模型进行测试,输入不同的二进制数,观察输出结果是否符合异或逻辑门的定义。 以上就是使用多层感知机实现异或逻辑门的算法步骤。需要注意的是,MLP的训练时间较长,需要耐心等待模型收敛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值