作业一:感知器的分类能力
一、作业要求
已知矩阵P=[0.1 0.7 0.8 0.8 1.0 0.3 0.0 -0.3 -0.5 -1.5;
1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 -1.5 -1.3];
T=[1 1 1 0 0 1 1 1 0 0 ;
0 0 0 0 0 1 1 1 1 1]
对以上输入、输出样本进行分类。
要求画出最后的线形图。
二、分析题目要求
首先画出题目给定的点。
要求设计一个二输入感知神经网络,将十个输入向为四类。
图1 给定的点
三、构建初始网络
应用newp()构造一个神经元感知器神经网络,其输入向量在[-2 2]之间。
由于为2输入,故神经元数量为2。
四、训练网络
net=train(net,P,T); 设置最大训练次数为10。
五、 实验结果
5.1 本次运行的最优分类情况:
图2 分类线
5.2 误差曲线
当学习函数为感知器学习函数learnp 时,其误差曲线为图3;当学习函数为标准感知器学习函数learnp n 时,其误差曲线为图4。
图3 学习函数learnp 的误差曲线 图4 学习函数learnpn 的误差曲线
六、网络仿真
应用sim 函数来进行网络仿真,实现对任何其他输入向量的模式划分。
选取 Q=[-0.4;0.9],可知其非常靠近原样本的一组数据即[-0.3 0.8],其目标输出应为为
[1 1]。
现在观察网络仿真结果,发现其被划分到相应的分类中。
七、结论与心得
该感知器网络完成了一个简单的四类模式划分问题。
通过此次实验,可得感知器具有根据已有数据自主学习规则的能力,这对于我们研究无固定函数表达式的输入输出有重要意义。
此外,通过比较两个学习函数后,发现learnp的误差曲线更符合要求,所以选择学习函数选择learnp。
做本题前一直在思考,10组数据如何分配,哪些做学习样本,哪些做测试样本。
最后决定取原样本中相近的数据来检测网络的识别能力。
八、附录: Matlab程序代码
P=[0.1 0.7 0.8 0.8 1.0 0.3 0.0 -0.3 -0.5 -1.5;
1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 -1.5 -1.3];
T=[1 1 1 0 0 1 1 1 0 0 ;
0 0 0 0 0 1 1 1 1 1]
net=newp([-2 2;-2 2],2,'hardlim','learnp');
net.trainParam.epochs=10;
net=train(net,P,T);
Q=[-0.4;0.9];
Y=sim(net,Q);
plotpv(P,T);
plotpc(net.iw{1},net.b{1});%画分类线
hold on;
plotpv(Q,Y);
xlim([-2,2]),ylim([-2,2]); %限定区间。