神经网络之后向传播分类(Classification by Backpropagation)
2018-01-06 12:10
555 查看
本算法是根据《数据挖掘概念与技术》第三版中的后向传播分类算法实现而来,中文书籍中有不少细节错误,影响阅读与判断,推荐看原书《Data Mining Concepts and Techniques》第三版。阅读本文需要注意以下两点:一是本文在与原书数据保持一致的情况下构造了输入数据矩阵文件,矩阵的下标与节点是相对应的,这点在程序中做了详细说明;二是While循环条件原书没有具体的设定,而且实验中也只是循环了一次,所以本程序也只进行了单次的验证,具体的设定需要根据实际情况而定。
本文参考原著,所以给出原著中该算法的伪代码,以及网络结构截图,更为详细的说明请参照原书
以下是该算法实现的Matlab程序:
下面是数据文件,拷贝之后保存为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
本文参考原著,所以给出原著中该算法的伪代码,以及网络结构截图,更为详细的说明请参照原书
以下是该算法实现的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
相关文章推荐
- CS231n学习记录Lec5 Backpropagation and Neural Networks反向传播与神经网络
- Principles of training multi-layer neural network using backpropagation 使用后向传播算法训练多层神经网络的规则
- Java Back Propagation Neural Network(JAVA反向传播神经网络)
- Java Back Propagation Neural Network(JAVA反向传播神经网络)
- 机器学习笔记07:神经网络的反向传播(Backpropagation)
- (三)Multi-class Classification and Neural Networks[多分类问题和神经网络]
- 斯坦福机器学习实验之3-多分类和神经网络(Multi-class Classification and Neural Networks)
- 循环神经网络教程3-BP算法和梯度消失问题, Part 3 – Backpropagation Through Time and Vanishing Gradients
- 动手写一个神经网络代码(附Backpropagation Algorithm代码分解)
- 神经网络和深度学习(二)——BP(Backpropagation Algorithm, 反向传播算法)
- 神经网络二:浅谈反向传播算法(backpropagation algorithm)为什么会很快
- [神经网络]2.2/2.3-How the backpropagation algorithm works-The two assumptions we need...(翻译)
- 神经网络学习笔记 - lecture3:The backpropagation learning proccedure
- 一文弄懂神经网络中的反向传播法(Backpropagation algorithm)
- [神经网络]2.1-How the backpropagation algorithm works-Warm up: a fast matrix-based approach ...(翻译)
- 一步一步分析讲解神经网络基础-backpropagation algorithm
- 神经网络学习笔记 - lecture3:The backpropagation learning proccedure
- 神经网络之后向传播算法
- 神经网络分类算法 数据挖掘
- TensorFlow 深度学习框架 (1)-- 神经网络与前向传播