资源简介
用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支持向量机源代码
-
基于simuli
nk的光伏模型搭建供大家参 - matlab各种功率谱画法及比较
- 光伏发电系统的MATLAB仿真
- 光伏发电的MATLAB并网仿真
- 计算方法上机实验报告-matlab
- FCM的MATLAB实现
- 用MATLAB画点电荷的电场线
- 装箱问题遗传算法求解
- 基于matlab的电力系统谐波仿真
- 一维激波管问题upwind格式matlab代码
- MATLAB中图像背景噪声去除
- 自组织特征映射神经网络matlab
- 实验室的极化码编码译码仿真程序,
- 双极性PWM单相全桥逆变电路
- 普源示波器 matlab读取程序
- Matlab写的粒子群优化算法,很好用!
- 基于MATLAB的两输入两输出DMC控制教程
- matlab基于GUI实现记事本功能
- 肤色模型人脸识别matlab代码
- 用matlab生成正弦表程序.m文件
- 数字信号处理课程设计
- 单神经元自适应PID代码
- 运动控制 速度开环调速系统模型
- 多元回归的交叉验证程序 可供做预测
- 最速下降法MATLAB程序
- 遗传算法程序优化pid参数
- svpwm逆变及电机转差频率控制
- 数值计算方法 基于 MATLAB实现
- 用matlab TV模型图像修复
评论
共有 条评论