前言
今天在图书馆进行了为期一天的攻关,对BP神经网络进行了深入的学习,晚上花了将近3个小时的时间完成了我的第一个神经网络程序(基于Matlab)。
希望这是一个好的开始。
这是我的第一个 Deep Learning / 神经网络 程序,运用了BP神经网络对8个数据点进行四分类。
Matlab代码如下:
exercise1_minibatch.m
clear; P = {[1;1] [1;2] [2;-1] [2;0] [-1;2] [-2;1] [-1;-1] [-2;-2]}; %11 Y = {[0;0] [0;0] [0;1] [0;1] [1;0] [1;0] [1;1] [1;1] }; B = [-155;234]; W = [12,-34 105,444]; Eta = 0.1; %learning rate iter= 10000; %iterator C = zeros(iter,1); m = 8; Dw = 0; Db = 0; for k=1:iter for i=1:8 Z = W*P{i}+B; A = myhardlim(Z); Dz = (A-Y{i})*1; Dw = Dw + Dz*P{i}'; Db = Db + Dz; if(mod(i,m)==0) W = W-Eta*Dw/m; B = B-Eta*Db/m; Dw = 0;
function mat = myhardlim(mat) [m,n] = size(mat); for i=1:m for j=1:n if(mat(i,j)>=0) mat(i,j)=1; elseif(mat(i,j)<0) mat(i,j)=0; end end end
Db = 0; end C(k) =C(k) + 1/2*sum((A-Y{i}).^2); end end plot(C); for i=1:iter if(C(i)==0) fprintf('iterator times: %d\n',i); break; end end实验数据
收敛所需轮数 | Eta(学习速率) | ||
mini_batch(m) | 0.1 | 1 | 10 |
1 | 798 | 81 | 10 |
2 | 1593 | 160 | 17 |
4 | 3185 | 319 | 33 |
8 | 6368 | 638 | 64 |
缺陷
1.样本集太少,且只有测试集,没有训练集,无法查看过拟合等情况。
优点
1.简单,适合入门;
2.对迭代轮数、BP算法等有了一个基本的认识;
3.对以后的进一步学习打下了基础。
未来工作
1.对MNIST数据集进行训练
2.对《Neural Network and Deep Learning》进一步学习(它使用Python训练了MNIST数据集)
Reference:
[1] 《机器学习》,周志华
[2] http://neuralnetworksanddeeplearning.com/chap2.html,Michael Nielsen
[3] 《神经网络理论及应用》课程PPT,蒲晓蓉