您的位置:首页 > 理论基础 > 计算机网络

神经网络之后向传播分类(Classification by Backpropagation)

2018-01-06 12:10 555 查看
本算法是根据《数据挖掘概念与技术》第三版中的后向传播分类算法实现而来,中文书籍中有不少细节错误,影响阅读与判断,推荐看原书《Data Mining Concepts and Techniques》第三版。阅读本文需要注意以下两点:一是本文在与原书数据保持一致的情况下构造了输入数据矩阵文件,矩阵的下标与节点是相对应的,这点在程序中做了详细说明;二是While循环条件原书没有具体的设定,而且实验中也只是循环了一次,所以本程序也只进行了单次的验证,具体的设定需要根据实际情况而定。

本文参考原著,所以给出原著中该算法的伪代码,以及网络结构截图,更为详细的说明请参照原书





以下是该算法实现的Matlab程序:

clc;
clear;
%加载测试数据文件
fileID = fopen('D:\matlabFile\Backward propagation\BP.txt');
DS=textscan(fileID,'%f %f %f %f %f %f');
fclose(fileID);
%将数据转换为矩阵格式,该矩阵的第一行为输入值,最后一行为输出值,倒数第二行为各节点的偏移量,中间为权重矩阵,
BP=[];
for i=1:length(DS)
BP=cat(2,BP,DS{i});
end
%取出输入层
Input=BP(1,:);
%取出偏移量
[Row,Column]=size(BP);
Theta=BP(Row-1,:);
%取出输出值
Output=BP(Row,:);
%取出权重矩阵,该矩阵因为是对称矩阵,所以我们只取上半部分
Weight=BP(2:Row-2,:);
%对各层的目标值进行设定,这里为了计算方便,将输入层也纳入计算,与输入值保持一致,隐藏层没有目标值,设为0,输出层为1
Target=Input;
Target(Column)=1;
%定义学习率
L=0.9;
%对输入层进行备份
Input_hidden=Input;
%%%%%%========这里特别要注意===========循环条件视情况而定,这里只是临时设定一个条件
while L>0
%将输入层的值直接赋给输出值
for i=1:length(Input)
if Input(i)~=0
Output(i)=Input(i);
end
end
%计算隐藏层和输出层的值,这里为了方便计算,对权重矩阵进行了转置
Weight=Weight';
for i=1:Column
%计算隐藏节点的输入值
Input_H=0;
for j=1:i
Input_H=Input_H+Weight(i,j)*Output(j);
end
%在输入值上加偏移量
Input_hidden(i)=Input_H+Theta(i);
if Input_hidden(i)~=0
%计算隐藏节点的输出量
Output(i)=1/(1+exp(-Input_hidden(i)));
end
end
%后向传播误差矩阵
Err=size(1,Column);
%计算每一个节点的误差
%首先计算输出层的误差,这里输出值的目标值为1
Err(Column)=Output(Column)*(1-Output(Column))*(Target(Column)-Output(Column));
%计算其他层的误差,输入层都为0
for i=Column-1:-1:1
Err_sum=0;
for j=i+1:Column
%这里注意权重矩阵做了转置,对下标进行了交换
Err_sum=Err_sum+Weight(j,i)*Err(j);
end
Err(i)=Output(i)*(1-Output(i))*Err_sum;
end
%更新权重矩阵
for i=1:Column
for j=1:i
%原为零值,直接跳过
if Weight(i,j)==0
continue;
end
Weight(i,j)=Weight(i,j)+L*Err(i)*Output(j);
end
end
%更新偏移量
for i=1:Column
Theta(i)=Theta(i)+L*Err(i);
end
end

下面是数据文件,拷贝之后保存为BP.txt

1 0 1 0 0 0

0 0 0 0.2 -0.3 0

0 0 0 0.4 0.1 0

0 0 0 -0.5 0.2 0

0 0 0 0 0 -0.3

0 0 0 0 0 -0.2

0 0 0 0 0 0

0 0 0 -0.4 0.2 0.1

0 0 0 0 0 0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  后向传播
相关文章推荐