• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: matlab  

资源简介

用matlab神经网络实现非线性识别 用matlab神经网络实现非线性识别

资源截图

代码片段和文件信息

%---------------------------------------------%
%       %
%          工作室提供代做matlab仿真       %
%       %
%  详情请访问:http://cn.mikecrm.com/5k6v1DP  %
%       %
%---------------------------------------------%

clear all
close all
clc
rand(‘seed‘2);

nSampDim=2;  %样本是二维的
t1=rand(10001).*pi;
t2=rand(10001).*pi+pi;
r=3*rand(10001)+5; 
x1=r.*cos(t1);
y1=r.*sin(t1)-1; 
x2=r.*cos(t2)+5;
y2=r.*sin(t2)+4;
%p1=[x1y1]*[cos(pi/50)sin(pi/50);-sin(pi/50)cos(pi/50)];
%p2=[x2y2]*[cos(pi/50)sin(pi/50);-sin(pi/50)cos(pi/50)];

%A1=p1(:1);  %旋转后x轴的坐标
%A2=p1(:2);  %旋转后y轴的坐标
%C1=p2(:1);
%C2=p2(:2);
A=[x1y1];  
C=[x2y2];
%AB各取150个进行训练
train_num_A=750;
train_num_C=750;
nTrainNum=train_num_A+train_num_C;
NUM_A=1000;
NUM_C=1000;
% A随机选取训练与测试的数据
r=randperm(NUM_A);  %随机打乱A序列
traind(1:train_num_A:)=A(r(1:train_num_A):);  %选A中的150个进行训练
testd(1:NUM_A-train_num_A:)=A(r(train_num_A+1:NUM_A):);  %选A中剩下的150个进行测试
%C随机选取训练与测试的数据
r=randperm(NUM_C);  %随机打乱C的序列
traind(train_num_A+1:train_num_A+train_num_C:)=C(r(1:train_num_C):);
testd(NUM_A-train_num_A+1:NUM_A+NUM_C-train_num_A-train_num_C:)=C(r(train_num_C+1:NUM_C):);
%赋值
train1=zeros(1train_num_A+train_num_C);
train1(1:train_num_A)=1;
test1=zeros(1NUM_A+NUM_C-train_num_A-train_num_C);
test1(1:NUM_A-train_num_A)=1;
%%构造网络
net.nIn=2;  %两个输入层节点
net.nHidden=10;  %3个隐含层节点
net.nOut=1;  %一个输出层节点
w=2*(rand(net.nHiddennet.nIn)-1/2);
b=2*(rand(net.nHidden1)-1/2);
net.w1=[wb];
W=2*(rand(net.nOutnet.nHidden)-1/2);
B=2*(rand(net.nOut1)-1/2);
net.w2=[WB];
%%训练数据归一化
%mm=mean(traind);
%均值平移
%traind_s=zeros(nTrainNum2);
%for i=1:2
    %traind_s(:i)=traind(:i)-mm(i);
%end
%方差标准化
%m1(1)=std(traind_s(:1));
%m1(2)=std(traind_s(:2));
%for i=1:2
    %traind_s(:i)=traind_s(:i)/m1(i);
%end
%%训练
SampleInEx=[traind‘;ones(1nTrainNum)];
expectedOut=train1;
eb=0.01;  %误差容限
eta=0.1;  %学习率
mc=0.1;  %动量因子
maxiter=5000;  %最大迭代次数
iteration=0;  %第一代

errRec=zeros(1maxiter);
outRec=zeros(nTrainNummaxiter);
NET=[];%记录
%开始迭代
for i=1:maxiter
    hid_input=net.w1*SampleInEx;  %隐含层的输入
    hid_out=sigmoid(hid_input);  %隐含层的输出
    ou_input1=[hid_out;ones(1nTrainNum)];  %输出层的输入
    ou_input2=net.w2*ou_input1;
    out_out=sigmoid(ou_input2);
    outRec(:i)=out_out‘;
    err=expectedOut-out_out;  %误差
    sse=sumsqr(err);
    errRec(i)=sse;  %保存误差值
    fprintf(‘第 %d 次迭代  误差: %f\n‘ i sse);
    iteration=iteration + 1;
    %判断是否收敛
    if sse<=eb
        break;
    end
    %误差反向传播
    %隐含层与输出层之间的局部梯度
    DELTA=err.*sigmoid(ou_input2).*(1-sigmoid(ou_input2));
    %输入层与隐层之间的局部梯度
    delta=net.w2(:1:end-1)‘*DELTA.*sigmoid(hid_input).*(1-sigmoid(hid_input));
    %权值修改量
    dWEX=DELTA*ou_input1‘;
    dwex=delta*SampleInEx‘;
    %修改权值,如果不是第一次修改,则使用动量因子
    if i==1
        net.w2=net.w2+eta*dWEX;
        net.w1=net.w1+eta*dwex;
    else
        net.w2=net.w2+(1-mc)*eta*dWEX+mc*dWEXOld;
        net.w1=net.w1+(1-mc)*eta*dwex+

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-09-17 10:21  用matlab神经网络实现非线性识别\
     目录           0  2018-09-17 10:24  用matlab神经网络实现非线性识别\非线性识别\
     文件          55  2018-08-27 11:33  用matlab神经网络实现非线性识别\非线性识别\【源码使用必读】.url
     文件        5110  2018-09-17 10:50  用matlab神经网络实现非线性识别\非线性识别\nonlinear.m
     文件         467  2018-09-17 10:50  用matlab神经网络实现非线性识别\非线性识别\sigmoid.m

评论

共有 条评论