资源简介

适合在校大学生初步实验使用,将此程序直接粘贴到Matlab的m文件中,便可直接运行,得到结果,本人已在博客中发表“与”运算实验,神经网络网址如https://blog.csdn.net/weixin_41529093/article/details/86713335,建议学有余力的同学不要下载,通过看我的博文,自己编出“异或”运算代码

资源截图

代码片段和文件信息

function Perception1_4_YiHuoYunSuan()
close all %关闭所有figure
rand(‘state‘sum(100*clock)) %随机数种子用时钟进行初始化
P=4;%训练样本数
%输入训练样本:
X(:1)=[0;0];
X(:2)=[0;1];
X(:3)=[1;0];
X(:4)=[1;1];
X=[-1*ones(14); X];%考虑阈值,设x0=-1
%输入对应期望输出:
d=[0 1 1 0];

%设置感知器参数
InDim=2; %输入样本维数
OutDim=1; %输出维数
MaxTrainNumber=10;%最大训练次数
Eta=1;%学习率
w1=[]; %创建w1矩阵
w2=[]; %创建w2矩阵
%感知器训练
%权值初始化
W=rand(InDimOutDim);
%设置阈值
T=0.1;
WExpand=[T; W];%合并阈值到权值

ErrHistory=[];
for i=1:MaxTrainNumber %循环MaxTrainNumber次
    for p=1:P
        net(p)=WExpand‘*X(:p);%计算样本p的net值
        o(p)=SinPoleTwoValue_f(net(p));%调用编辑好的变换函数,得到输出值
        Err(p)=o(p)-d(p);%计算误差
        WExpand=WExpand+Eta*(d(p)-o(p))*X(:p);%根据误差更新权值
    end
    %计算总误差
    Err_sum=sum(abs(Err));
     %写出权值w1w2的一维矩阵复合
w1=[w1 WExpand(2)];
w2=[w2 WExpand(3)];
    %记录每次权值调整后的训练误差
    ErrHistory=[ErrHistory Err_sum]; 
    if Err_sum==0 break end %判断训练是否停止
end
W=WExpand(2:3);
T=WExpand(1);

disp([‘The final Error is: ‘num2str(Err_sum) ‘.‘]);
disp([‘The curren Epoch is: ‘num2str(i) ‘.‘]);

评论

共有 条评论