BP神经网络与MATLAB实现案例一

众做周知,BP神经网络是最常用的一种神经网络。
本文主要讲解%实现对玫瑰的识别%案例。
关于神经网络的介绍与BP的详解,论坛里铺天盖地,不在此赘述。

一.BP简述

BP神经网络与MATLAB实现案例一_第1张图片

简要概括一下:

  • 一个输入层、一个隐层、一个输出层的神经网络足以应付大部分训练
  • BP的主要特点:信号前向传播,误差反向传播
  • 激励函数为取Sigmoid函数
  • 大体流程:数据预处理、初始化网络、计算隐层输出、得出输出层输出、计算误差、更新连接权值、检查迭代、仿真

二. 训练过程(以识别玫瑰为例)

  1. 提取红玫瑰(1)、粉玫瑰(2)、蓝玫瑰(3)的外形(appearance),花瓣大小(petal),气味(taste),绽放程度(bloom)整理成数据(英语随便整的不要介意),见下图
  2. 归一化数据、构造输出矩阵、创建神经网络、设置参数、启动训练、反归一化、仿真
  3. 其中最大迭代次数300、期望误差0.01、学习效率0.01
  4. 输出识别率:96.00%
    BP神经网络与MATLAB实现案例一_第2张图片
    迭代150次之后时基本稳定,结果很可观
clc
clear

%读取数据
[f1,f2,f3,f4,class] = textread('rose.txt' , '%f%f%f%f%f',150);

%归一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]')  ;


s = length( class ) ;
output = zeros( s , 3  ) ;
for i = 1 : s 
   output( i , class( i )  ) = 1 ;
end

%创建网络
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ; 

%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 300;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;

 net = train( net, input , output' ) ;
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);

testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;


Y = sim( net , testInput ) 


[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
    [m , Index] = max( Y( : ,  i ) ) ;
    if( Index  == c(i)   ) 
        hitNum = hitNum + 1 ; 
    end
end
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )

你可能感兴趣的:(神经网络)