博客
关于我
【车牌识别】基于matlab GUI BP神经网络车牌识别【含Matlab源码 858期】
阅读量:347 次
发布时间:2019-03-04

本文共 2071 字,大约阅读时间需要 6 分钟。

BP神经网络简介与实现

BP(Back Propagation)神经网络是由Rumelhart和McCelland等于1986年首次提出的一种多层前馈神经网络,相关研究发表在Nature期刊上。BP网络通过误差逆传播算法实现训练,能够学习和存储大量输入-输出模式映射关系,是现今应用最广泛的神经网络模型之一。

BP算法的基本思想

BP算法解决了多层感知器在获取隐层权值时遇到的瓶颈。其基本思想是通过正向传播和反向传播两个过程实现训练。正向传播时,输入样本从输入层逐层传递至输出层。若输出与期望不符,则启动反向传播阶段。反向传播时,误差从输出层逐层向输入层反传,并分摊给各层单元,据此调整权值和阈值。

BP网络特性分析

BP网络的功能特性主要由以下三个要素决定:

  • 网络拓扑结构:BP网络是多层感知器,通常采用单隐层(如三层感知器)结构,已能解决简单非线性问题。
  • 传递函数:采用Sigmoid函数作为非线性激活函数,具备连续性和可导性,适合处理和训练。
  • 学习算法:BP算法通过梯度下降法和误差反向传播实现参数优化。
  • BP网络训练过程

    BP网络的训练分为前向传输和逆向反馈两个阶段:

  • 前向传输:随机初始化权重和偏置后,逐层波浪式传递输出值。
  • 逆向反馈:根据误差信号调整权值和偏置,减小误差平方和。
  • 训练过程多趟迭代,每轮使用所有训练集记录。训练终止条件包括迭代次数或预测准确率达到设定值。

    BP网络设计原则

    网络设计时需从以下方面考虑:

  • 网络层数:单隐层结构已能解决问题,增加层数可提高精度。
  • 隐层神经元个数:个数过少训练困难且精度低,过多可能导致过拟合。
  • 初始权值:通常随机在[-1,1]范围内选择,部分研究建议基于输入特征量级初始化。
  • 学习速率:合理选择0.01-0.8范围,需根据误差曲面调整。
  • 期望误差:根据网络复杂度选择合适值,通常通过对比多个网络设计确定。
  • BP网络局限性

    BP网络存在以下主要问题:

  • 训练时间较长:学习速率通常较小,需较多迭代才能收敛。
  • 可能陷入局部最小值:梯度下降法可能导致局部极小值收敛。
  • 训练稳定性:较大学习速率可能导致系统不稳定。
  • BP网络改进方法

    为解决上述问题,BP网络常采取以下改进措施:

  • 动量因子算法:在反向传播中加入动量因子,缓解局部极小值问题。
  • 自适应学习速率:根据误差变化动态调整学习速率。
  • 作用函数后缩法:通过平移作用函数加速收敛。
  • BP网络实现代码

    以下为BP网络的MATLAB实现示例:

    function run(varargin)    gui_Singleton = 1;    gui_State = struct(...)    gui_Callback = @run_OpeningFcn;    nargout = [1:3];    [handles.output] = gui_mainfcn(gui_State, varargin{:});endfunction run_OpeningFcn(hObject, eventdata, handles)    handles.output = hObject;    set(handles.axes1, 'Visible', 'off');    set(handles.axes2, 'Visible', 'off');    [filename, cd1] = uigetfile('*.tif;*.TIF;*.JPG;*.jpg;*.bmp;*.BMP;*.jpeg;*.JPEG');    if ~filename        return;    end    d = imread(filename);    imshow(d);    handles.I = d;    handles.filename = filename;    guidata(hObject, handles);endfunction pushbutton1_Callback(hObject, eventdata, handles)    [filename, cd1] = uigetfile('*.tif;*.TIF;*.JPG;*.jpg;*.bmp;*.BMP;*.jpeg;*.JPEG');    if ~filename        return;    end    d = imread(filename);    handles.I = d;    imshow(d);    handles.filename = filename;    guidata(hObject, handles);end

    运行结果

    运行结果如下(请根据实际情况提供图片或代码输出):

    function run_OutputFcn(hObject, eventdata, handles)    varargout = {handles.output};end

    ##备注

    如需完整代码或代写,请联系QQ 1564658423。

    转载地址:http://eqle.baihongyu.com/

    你可能感兴趣的文章
    Python3 shutil模块
    查看>>
    Python关于strftime函数详细解析 附实战代码
    查看>>
    Python3 tutorial day3
    查看>>
    python3 week4
    查看>>
    Python3 创建数组
    查看>>
    python3 套接字异常(a byte-like object is required not str)
    查看>>
    python3 实现用户三次输入错误记录黑名单并对该用户登录锁定-day1
    查看>>
    python3 文本变图片
    查看>>
    Python3 查看 com 组件的属性
    查看>>
    python3 案例分享--发邮件
    查看>>
    python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
    查看>>
    Python3 求最大/小值及索引值 Numpy
    查看>>
    python3+django使用celery执行某些任务失败的解决方案
    查看>>
    Python3+Requests+Unittest实战系列【一】
    查看>>
    python3+requests+unittest实战系列【一】
    查看>>
    python3+requests+unittest实战系列【二】
    查看>>
    Python3+Requests+Unittest实战系列【二】
    查看>>
    python3----ASCII
    查看>>
    Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
    查看>>
    Python3-如何自我更新作为服务运行的应用程序
    查看>>