资源简介
一个人工神经元网络是由一个多层神经元结构组成,每一层神经元拥有输入(它的输入是前一层神经元的输出)和输出,我们把神经元和与之对应的神经元之间的连线用生物学的名称,叫做突触,在数学模型中每个突触有一个加权数值,称做权重,此时第i层上的某个神经元所得到的输出等于每一个权重乘以第i-1层上对应的神经元的输出之和,最后再通过激活函数来对输出进行量化,在与阈值相比较判断是否属于某一类。
代码片段和文件信息
clear
clc
load fisheriris;%导入数据
Iris={meas(:1)meas(:2)meas(:3)meas(:4)species};%cell
[~n]=size(Iris);
for i=1:n-1
data(:i)=Iris{1i};
end
[mn]=size(data);
for i=1:m
if strcmp(Iris{15}{i1}‘setosa‘)
data(i5:7)=[1 0 0];
elseif strcmp(Iris{15}{i1} ‘versicolor‘)
data(i5:7)=[0 1 0];
else
data(i5:7)=[0 0 1];
end
end
%数据归一化处理[01]区间内
x_max=max(data);
x_min=min(data);
data=(data-ones(m1)*x_min)./(ones(m1)*(x_max-x_min));
% 这里可用函数data=mapminmax(data01)替换
%但data需要转置因为mapminmax只能对行进行归一化
%%
%K折
indices=crossvalind(‘Kfold‘data(1:1507)5);%进行随机分包
z1=0;z2=0;%计算平均准确率
alpha=4;%输入神经元数目
beta=10;%隐层神经元数目
lamda=3;%输出神经元数目
%%
s=rng;
rand(alphabeta);
rand(betalamda);
rand(1beta);
rand(1lamda);
rng(s);
%%保证每次运行生成的随机数相同
%训练
for k=1:1:5
%%%%%%%%%%%%%%%%%%%自定义%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
test1=(indices == k);%逻辑验证
train1=~test1;%逻辑验证
c_test=data(test11:4);
c_test_label=data(test15:7);
x_train=data(train11:4);
x_train_label=data(train15:7);
%%
[mn]=size(x_train);
%生成随机初始向量
W1=rand(alphabeta);%输入层和隐层之间的权值矩阵
W2=rand(betalamda);%隐层和输出层间的权值矩阵
B1=rand(1beta);%隐层阈值矩阵
B2=rand(1lamda);%输出层阈值矩阵
B22=B2;
W11=W1;
Eta=0.1;%学习率
iter_max=10000;%最大迭代次数
iter=1;
%BP神经网络,每次仅针对一个训练样例更新连接权和阈值
while iter<=iter_max
for i=1:m
hidden_in=x_train(i:)*W1;%隐层输入
hidden_out=sigmod(hidden_in-B1);%隐层输出
output_in=hidden_out*W2;%输出层输入
output_out=sigmod(output_in-B2);%输出层输出
%计算误差
E(i)=sum((output_out-x_train_label(i:)).^2);%求平方和也可用sumsqr函数
%%
%更新参数BP神经网络中最核心的部分
g=output_out.*(1-output_out).*(x_train_label(i:)-output_out);%计算输出层神经元的梯度项
e=hidden_out.*(1-hidden_out).*(g*W2‘);%计算隐层神经元的梯度项
Deta_W2=Eta*hidden_out‘*g;
Deta_B2=-Eta*g;
Deta_W1=Eta*x_train(i:)‘*e;
Deta_B1=-Eta*e;
W1=W1+Deta_W1;
W2=W2+Deta_W2;
B1=B1+Deta_B1;
B2=B2+Deta_B2;
end
%计算训练集的累积误差
E=mean(E);
if E<1e-4 %目标误差
iter
break
end
if mod(iter1000)==0
iter;
end
iter=iter+1;%更新迭代次数
end
%%
%测试
[resultaccuracy]=BP_test(c_testc_test_labelW1W2B1B2);
disp(strcat(‘第‘num2str(k)‘次自定义准确率为‘num2str(accuracy*100)‘%‘))
z1=z1+accuracy;
%%%%%%%%%%%%%%%%%%%自定义%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%调包%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net = newff( x_train‘ x_train_label‘ 10);
%设置训练参数
net.trainParam.showWindow = false;
net.trainParam.showCommandLine = false;
net.trainparam.epochs = 10000 ;%允许最大训练步数500步
net.trainparam.goal = 0.0001 ;%训练目标最小误差0.01
net.trainParam.lr = 0.1 ;%学习速率0.1
%开始训练
net = train( net x_train‘ x_train_label‘) ;
%测试
Y = sim(netc_test‘) ;
%统计识别正确率,列最大值所在位置对比
[max_Yindex1]=max(Y[]1); %求最大值所在位置
[max_c_test_labelindex2]=max(c_test_label‘[]1);
a=0;
for i=1:1:30
if index1(i)==index2(i)
a=a+1;
end
end
r=a/30;
z2=z2+r;
disp(strcat(‘第‘num2str(k)‘次调包准确率为‘num2str(r*100)‘%‘))
%%%%%%%%%%%%%%%%%%%调包%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
disp(strcat(‘自定义平均准确率为‘num2str(z1/5*100)‘%‘))
disp(strcat(‘调包平均准确率为‘num2str(z2/5*100)‘%‘))
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3323 2020-07-02 15:57 bp_iris.m
文件 411 2020-06-08 10:30 BP_test.m
文件 58 2020-06-08 10:28 sigmod.m
文件 392886 2020-07-05 12:27 神经网络iris.docx
相关资源
- 包含多种粒子群算法
- gui显示文本动态框
- 机器人运动学正解逆解.rar
- GA-BP算法
- 双层遗传算法
- 单车道元胞自动机NaSch模型
- emdeemdceemd去噪
- 24小时带光伏蓄电池微电网仿真
- BP神经网络算法,内含3个程序,直接
- 偏最小二乘回归算法
- 光纤色散计算
- mimo信道容量及和速率的仿真代码
- 小波重构+高频滤波
- 电偶极子磁场在静态和高速运动状态
- 维纳滤波应用
- mimo-odfm仿真
- BP神经网络鲍鱼年龄预测.zip
- 图像分割效果评价
- 基于分数阶傅里叶变换的相位迭代图
- SAR经典的wk成像算法.zip
- 遗传算法小车避障问题
- 选址分配-遗传算法
- 33节点潮流计算代码
- PID控制Matalb经典算法
- 2018年国赛b题代码RGV动态调度
- 各种体制雷达信号仿真
- 模糊控制与bp神经网络范例
- 心电信号预处理去噪
- 7-band EQ均衡器算法
- 永磁同步电机直接转矩控制仿真-矩阵
评论
共有 条评论