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

神经网络算法--BP网络--人脸朝向

2014-03-12 17:16 337 查看


神经网络算法之二:BP网络 提纲作者: 洪北川





其实BP神经网络只是某种意义上RBF网络的复杂化,反映在三点上:

1)网络的中间层增加了;



2)权重W复杂化;(这是废话)



3)对权的推导采用有后往前的方法;





Backpropagation was created by generalizing the widrow-hoff learning rule to multiple-layer network and differentiable transfer functions.

function mytest()

clc;

images=[ ];

M_train=3;%表示人脸

N_train=5;%表示方向

sample=[];

pixel_value=[];

sample_number=0;

for j=1:N_train

for i=1:M_train

str=strcat('Images\',num2str(i),'_',num2str(j),'.bmp'); %读取图像,连接字符串形成图像的文件名。

img= imread(str);

[rows cols]= size(img);%获得图像的行和列值。

img_edge=edge(img,'Sobel');

%由于在分割图片中我们可以看到这个人脸的眼睛部分也就是位于分割后的第二行中,位置变化比较大,而且眼睛边缘检测效果很好

sub_rows=floor(rows/6);%最接近的最小整数,分成6行

sub_cols=floor(cols/8);%最接近的最小整数,分成8列

sample_num=M_train*N_train;%前5个是第一幅人脸的5个角度

sample_number=sample_number+1;

for subblock_i=1:8 %因为这还在i,j的循环中,所以不可以用i

block_num=subblock_i;

pixel_value(sample_number,block_num)=0;

for ii=sub_rows:(2*sub_rows)

for jj=(subblock_i-1)*sub_cols+1:subblock_i*sub_cols

pixel_value(sample_number,block_num)=pixel_value(sample_number,block_num)+img_edge(ii,jj);

end

end

end

end

end

%将特征值转换为小于1的值

max_pixel_value=max(pixel_value);

max_pixel_value_1=max(max_pixel_value);

for i=1:3

mid_value=10^i;

if(((max_pixel_value_1/mid_value)>1)&&((max_pixel_value_1/mid_value)<10))

multiple_num=1/mid_value;

pixel_value=pixel_value*multiple_num;

break;

end

end

% T 为目标矢量

t=zeros(3,sample_number);

%因为有五类,所以至少用3个数表示,5介于2的2次方和2的3次方之间

for i=1:sample_number

% if((mod(i,5)==1)||(mod(i,5)==4)||(mod(i,5)==0))

if(i<=3)||((i>9)&&(i<=12))||((i>12)&&(i<=15))

t(1,i)=1;

end

%if((mod(i,5)==2)||(mod(i,5)==4))

if((i>3)&&(i<=6))||((i>9)&&(i<=12))

t(2,i)=1;

end

%if((mod(i,5)==3)||(mod(i,5)==0))

if((i>6)&&(i<=9))||((i>12)&&(i<=15))

t(3,i)=1;

end

end

% NEWFF——生成一个新的前向神经网络

% TRAIN——对 BP 神经网络进行训练

% SIM——对 BP 神经网络进行仿真

% 定义训练样本

% P 为输入矢量

P=pixel_value'

% T 为目标矢量

T=t

size(P)

size(T)

% size(P)

% size(T)

% 创建一个新的前向神经网络

net_1=newff(minmax(P),[10,3],{'tansig','purelin'},'traingdm')

% 当前输入层权值和阈值

inputWeights=net_1.IW{1,1}

inputbias=net_1.b{1}

% 当前网络层权值和阈值

layerWeights=net_1.LW{2,1}

layerbias=net_1.b{2}

% 设置训练参数

net_1.trainParam.show = 50;

net_1.trainParam.lr = 0.05;

net_1.trainParam.mc = 0.9;

net_1.trainParam.epochs = 10000;

net_1.trainParam.goal = 1e-3;

% 调用 TRAINGDM 算法训练 BP 网络

[net_1,tr]=train(net_1,P,T);

% 对 BP 网络进行仿真

A = sim(net_1,P);

% 计算仿真误差

E = T - A;

MSE=mse(E)

x=[0.14 0 1 1 0 1 1 1.2]';

sim(net_1,x)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: