资源简介
用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
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论