MATLAB神经网络学习(1):单层感知器
单层感知器由一个线性组合器和一个二值阈值元件组成。
输入是一个N维向量 x=[x1,x2,...,xn],其中每一个分量对应一个权值wi,隐含层输出叠加为一个标量值:
随后在二值阈值元件中对得到的v值进行判断,产生二值输出:
可以将数据分为两类。实际应用中,还加入偏置,值恒为1,权值为b。这时,y输出为:
单层感知器结构图:
单层感知器进行模式识别的超平面由下式决定:
当维数N=2时,输入向量可以表示为平面直角坐标系中的一个点。此时分类超平面是一条直线:
这样就可以将点沿直线划分成两类。
单层感知器实例:
.....重复上步骤,直到达到设定的loop值,或者误差小于设定值
% perception_hand_un.m %% 清理 clear,clc close all %% n=0.1; % 学习率 w=[0,0,0]; P=[ -9, 1, -12, -4, 0, 5;... 15, -8, 4, 5, 11, 9]; d=[1,1,0,0,0,1]; % 期望输出 P=[ones(1,6);P]; MAX=100; % 最大迭代次数为100次 %% 训练 i=0; while 1 v=w*P; y=hardlim(v); % 实际输出 %更新 e=(d-y); ee(i+1)=mae(e); if (ee(i+1)<0.001) % 判断 disp('we have got it:'); disp(w); break; end % 更新权值和偏置 w=w+n*(d-y)*P'; if (i>=MAX) % 达到最大迭代次数,退出 disp('MAX times loop'); disp(w); disp(ee(i+1)); break; end i= i+1; end %% 显示 figure; subplot(2,1,1); % 显示待分类的点和分类结果 plot([ -12 -4 0],[ 4 5 11],'o'); hold on; plot([-9 ,1,5],[15,-8,9],'*'); axis([-13,6,-10,16]); legend('第一类','第二类'); title('6个坐标点的二分类'); x=-13:.2:6; y=x*(-w(2)/w(3))-w(1)/w(3); plot(x,y); hold off; subplot(2,1,2); % 显示mae值的变化 x=0:i; plot(x,ee,'o-'); s=sprintf('mae的值(迭代次数:%d)', i+1); title(s);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <button id= "btn1" onclick= "view_code('pre1');" > view code</button> % perception_newp.m % 清理 clear , clc close all % 创建感知器 net=newp([-20,20;-20,20],1); %定义输入训练向量 P=[ -9, 1, -12, -4, 0, 5;... 15, -8, 4, 5, 11, 9]; % 期望输出 T=[0,1,0,0,0,1] % 训练 net=train(net,P,T); % 输入训练数据仿真验证 Y=sim(net,P) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!