资源简介
多层前馈神经网络bp(back propagation)代码附带数据集,matlab版本
代码片段和文件信息
%基于梯度下降法的三层sigmoid单元的前向网络的BP算法
%Train为输入样本,行表示特征,列表示样本,Except为目标向量
%第一层有4个神经元
%隐含层层有3个神经元
%输出层有3个神经元
clear all;
%导入数据
data = load(‘iris.txt‘);
data(:5 ) = [];%现在的鸢尾花数据集第五列不需要,所以在这里删除它
%利用每一类的前40个数据作为训练数据
Train = [data(1:40:);data(51:90:);data(101:140:)]‘;
%定义期望输出
class1 = repmat([0.950.050.05]401);
class2 = repmat([0.050.950.05]401);
class3 = repmat([0.050.050.95]401);
Expect = [class1;class2;class3]‘;
[it] = size(Train);%i表示输入层神经元的个数
[kt] = size(Expect);%k表示输出层神经元的个数
j = 5;%表示第一层神经元的个数
b = 5;%表示第二层神经元的个数
%开始训练数据
alpha = 0.05;%学习速率
goal = 0.02;%精度要求
err = 1;%误差的初始值
iter = 0;%用来记录迭代的次数
%初始化网络权值
W01 = -0.5 + 0.5 * rand(ji+1);%输入与第一层之间的网络权值
W12 = -0.5 + 0.5 * rand(bj+1);%第一层与的二层之间的网络权值
W23 = -0.5 + 0.5 * rand(kb+1);%第二层与第三层之间的网络权值
%初始化权重变化量矩阵
dW01 = zeros(size(W01));
dW12 = zeros(size(W12));
dW23 = zeros(size(W23));
%初始化误差矩阵
ErrArray = [];
while err > goal%检查退出循环条件
iter = iter + 1;%迭代次数增加一
for m = 1:t
Inet = W01 * [Train(:m);1];%前向计算过程
O1 = 1 ./ (1 + exp(-Inet));%获得第一层的输出
Nnet = W12 * [O1;1]; %获得第二层的输出
O2 = 1 ./ (1 + exp(-Nnet));
Lnet = W23 * [O2;1]; %获得输出层输出
O3 = 1 ./ (1+exp(-Lnet));
E(:m) = Expect(:m) - O3;%计算误差
%误差反向传播
deltak=O3.*(1-O3).*E(:m);%对于输出单元
dW23=alpha*deltak*[O2;1]‘; %输出层权重调整
deltaj=O2.*(1-O2).*(W23(:1:b)‘*deltak);%对于第二层单元
dW12=alpha*deltaj*[O1;1]‘; %第二层权值调整
deltai=O1.*(1-O1).*(W12(:1:j)‘*deltaj); %对于第一层
dW01=alpha*deltai*[Train(:m);1]‘; %第一层的权值调整 ‘
%更新权值
W01=W01+dW01;
W12=W12+dW12;
W23=W23+dW23;
end
total=0;%每一次迭代的误差
for i=1:t
total=total+sum(E(:m).*E(:m));
end
err=0.5*total;
time(iter)=iter;
ErrArray=[ErrArrayerr];%记录每次的迭代误差
end
%显示误差的变化趋势
figure;
subplot(121);
plot(timeErrArray(1:iter));
title(‘网络误差‘);
xlabel(‘迭代的次数‘);
ylabel(‘误差‘);
%下面利用得到的模型对数据进行分类
Test = [data(41:50:);data(91:100:);data(141:150:)]‘;
%下面的三个矩阵用来记录那些数据分到那些类里面,order123分别统计第一 第二 第三类的数据
order1=[];
order2=[];
order3=[];
count=[0 0 0];%用来统计对应类的个数
for i=1:30%总共有30个数据,分别对每一个进行分类
I1=W01*[Test(:i);1];%得到第一层输入
O1=1./(1+exp(-I1));%得到第一层输出
I2=W12*[O1;1];%得到第二层的输入
O2=1./(1+exp(-I2));%得到第二层输出
I3=W23*[O2;1];%得到第三层的输入
O3=1./(1+exp(-I3));%得到第三层的输出
%[numk]=max(O3);%选取第三层的输出的最大值,哪个分量最大就归为哪一类
%count(k)=count(k)+1;
if O3(1)>=0.9 & O3(2)<=0.1 & O3(3)<=0.1
order1=[order1i];
count(1)=count(1)+1;
elseif O3(2)>=0.9 & O3(1)<=0.1 & O3(3)<=0.1
order2=[order2i];
count(2)=count(2)+1;
elseif O3(3)>=0.9 & O3(2)<=0.1 & O3(1)<=0.1
order3=[order3i];
count(3)=count(3)+1;
end
end
fprintf(‘分类为第一个类的个数为:%d\n‘count(1));
disp(‘序号为:‘);
disp(order1);
fprintf(‘分类为第二个类的个数为:%d\n‘count(2));
disp(‘序号为:‘);
disp(order2);
fprintf(‘分类为第三个类的个数为:%d\n‘count(3));
disp(‘序号为:‘);
disp(order3);
fprintf(‘本次总共迭代了 %d 次\n‘iter);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3468 2017-12-24 20:31 bp代码\BPNet.m
文件 2848 2017-12-17 19:18 bp代码\Iris.txt
目录 0 2018-03-07 20:47 bp代码\
- 上一篇:基于多播的QOSmatlab程序
- 下一篇:基于matlab的模糊控制程序集
相关资源
- BP算法的MATLAB实现
- 神经网络解决TSP问题
- LDPC的matlab 仿真 BP算法 BPSK调制
- MATLAB BP神经网络工具箱
- bp神经网络算法的一个matlab实现
- GaborGMRFLBP纹理特征提取方法_MATLAB
- \\精通MATLAB神经网络代码
- matlab使用gabor变换和神经网络实现人脸
- 神经网络模型预测控制器
- matlab 结构振动控制代码-RBPF
-
Simuli
nk_RBF神经网络PID控制 - 神经网络理论与Matlab R2007实现
- BPA转matpower格式Matlab程序
- Kohonen神经网络算法的matlab实现
- matlab BP神经网络 0-9数字识别
- 基于人工神经网络的信号预测在Matl
- 灰色神经网络Matlab代码
- 遗传算法优化BP神经网络,以非线性函
-
神经网络pid仿真simuli
nk - 基于遗传算法的BP神经网络MATLAB代码
- matlab实现模糊神经网络
- matlab BP神经网络的动量梯度下降算法
- 计算bpsk的循环累积量
- 简化模糊神经网络MATLAB代码
- 喷泉码之LT码的编解码
- MATLAB 3层BP神经网络资源
- 零基础快速入门Matlab神经网络.txt
- 用MATLAB(BPSK仿真+直接扩频
- RBF神经网络自适应控制MATLAB仿真 刘金
- LDPC BP算法
评论
共有 条评论