BP神经网络算法学习

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是眼下应用最广泛的神经网络模型之中的一个。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描写叙述这样的映射关系的数学方程。

一个神经网络的结构示意图例如以下所看到的。

clip_image002

BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。输入层神经元的个数由样本属性的维度决定,输出层神经元的个数由样本分类个数决定。隐藏层的层数和每层的神经元个数由用户指定。每一层包括若干个神经元,每一个神经元包括一个而阈值clip_image004,用来改变神经元的活性。网络中的弧线clip_image006表示前一层神经元和后一层神经元之间的权值。每一个神经元都有输入和输出。输入层的输入和输出都是训练样本的属性值。

对于隐藏层和输出层的输入clip_image008 当中,clip_image006[1]是由上一层的单元i到单元j的连接的权;clip_image010是上一层的单元i的输出;而clip_image004[1]是单元j的阈值。

神经网络中神经元的输出是经由赋活函数计算得到的。该函数用符号表现单元代表的神经元活性。赋活函数一般使用simoid函数(或者logistic函数)。神经元的输出为:

clip_image012

除此之外,神经网络中有一个学习率(l)的概念,通常取0和1之间的值,并有助于找到全局最小。假设学习率太小,学习将进行得非常慢。假设学习率太大,可能出如今不适当的解之间摆动。

交代清楚了神经网络中基本要素,我们来看一下BP算法的学习过程:

BPTrain(){

      初始化network的权和阈值。

      while 终止条件不满足 {

            for samples中的每一个训练样本X {

            // 向前传播输入

            for 隐藏或输出层每一个单元j {

                  clip_image014;// 相对于前一层i,计算单元j的净输入 clip_image016;// 计算单元j的输出

            }

            // 后向传播误差

            for 输出层每一个单元j {

                  clip_image018;// 计算误差

            }

            for 由最后一个到第一个隐藏层,对于隐藏层每一个单元j {

                   clip_image020;// k是j的下一层中的神经元

            }

            for network中每一个权clip_image006[2] {

                    clip_image022 ; // 权增值

                    clip_image024 ; // 权更新

             }

             for network中每一个偏差clip_image004[2] {

                      clip_image027; // 偏差增值

                      clip_image029;// 偏差更新

             }

      }

}

算法基本流程就是:

1、初始化网络权值和神经元的阈值(最简单的办法就是随机初始化)

2、前向传播:依照公式一层一层的计算隐层神经元和输出层神经元的输入和输出。

3、后向传播:依据公式修正权值和阈值

直到满足终止条件。

算法中还有几点是须要说明的:

1、关于clip_image031clip_image031[1]是神经元的误差。

对于输出层神经元clip_image018[1],当中,clip_image010[1]是单元j的实际输 出,而clip_image035是j基于给定训练样本的已知类标号的真正输出。

对于隐藏层神经元clip_image037,当中,clip_image039是由下一较高层中单元k到单元j的连接权,而clip_image041是单元k的误差。

权值增量是clip_image022[1],阈值增量是clip_image027[1],当中clip_image043是学习率。

对于clip_image031[2]的推导採用了梯度下降的算法。推导的前提是保证输出单元的均方差最小。clip_image046,当中P是样本总数,m是输出层神经元个数clip_image048是样本实际输出,clip_image050是神经网络输出。

梯度下降思路就是对clip_image052clip_image039[1]的导数。

对于输出层:

clip_image054

clip_image056

当中的clip_image058就是clip_image018[2]

对于隐藏层:

clip_image060

clip_image062

当中clip_image064=clip_image066就是隐藏层的误差计算公式。

2、关于终止条件,能够有多种形式:

§ 前一周期全部的clip_image068都太小,小于某个指定的阈值。

§ 前一周期未正确分类的样本百分比小于某个阈值。

§ 超过预先指定的周期数。

§ 神经网络的输出值和实际输出值的均方误差小于某一阈值。

一般地,最后一种终止条件的准确率更高一些。

在实际使用BP神经网络的过程中,还会有一些实际的问题:

1、 样本处理。对于输出,假设仅仅有两类那么输出为0和1,仅仅有当clip_image070趋于正负无穷大的时候才会输出0,1。因此条件可适当放宽,输出>0.9时就觉得是1,输出<0.1时觉得是0。对于输入,样本也须要做归一化处理。

2、 网络结构的选择。主要是指隐藏层层数和神经元数决定了网络规模,网络规模和性能学习效果密切相关。规模大,计算量大,并且可能导致过度拟合;可是规模小,也可能导致欠拟合。

3、 初始权值、阈值的选择,初始值对学习结果是有影响的,选择一个合适初始值也很重要。

4、 增量学习和批量学习。上面的算法和数学推导都是基于批量学习的,批量学习适用于离线学习,学习效果稳定性好;增量学习使用于在线学习,它对输入样本的噪声是比較敏感的,不适合剧烈变化的输入模式。

5、 对于激励函数和误差函数也有其它的选择。

总的来说BP算法的可选项比較多,针对特定的训练数据往往有比較大的优化空间。

转载于:https://www.cnblogs.com/gcczhongduan/p/3983168.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phppage类封装分页功能_PHP封装的page分页类定义与用法完整示例

本文实例讲述了PHP封装的page分页类定义与用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;亲测有效&#xff0c;见下图>1. 测试实例test.phpheader("Content-Type: text/html; charsetutf-8");date_default_timezone_set("Asia/Shanghai")…

ms agent

Microsoft Agent是微软公司于1997年9月发布的一项代理软件开发技术&#xff0c;而后被集成到Internet Explorer 4.0 Plus及更高版本中&#xff0c;目前版本为2.0&#xff0c;支持简体中文。作为一种软件代理工具&#xff0c;Agent以其强大的交互功能、鲜明的人性特点、优美的操…

无向图的深度优先遍历非递归_【数据结构图(一)】什么是图

一、什么是“图”(Graph) 表示“多对多”的关系包含一组顶点&#xff1a;通常用 V (Vertex) 表示顶点集合一组边&#xff1a;通常用 E (Edge) 表示边的集合无向边&#xff1a;(v, w) 有向边&#xff1a;不考虑重边和自回路二、抽象数据类型定义类型名称&#xff1a;图(Graph)数…

LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?(前缀和)

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的正整数数组 candiesCount &#xff0c;其中 candiesCount[i] 表示你拥有的第 i 类糖果的数目。 同时给你一个二维数组 queries &#xff0c;其中 queries[i] [favoriteTypei, favoriteDayi, dailyCapi] 。 你按照如下…

wdcp-apache开启KeepAlive提高响应速度

因为我们的网站&#xff0c;媒体文件&#xff0c;js文件&#xff0c;css文件等都在同一个服务器上&#xff0c;并且&#xff0c;我们网站有非常多的图片&#xff0c;所以当建立好tcp链接之后&#xff0c;不应该马上关闭连接&#xff0c;因为每建立一次连接还要进行dns解析&…

python的指针跟c的区别_ctypes中的LP_x*指针和*p指针有什么区别?(以及与结构的奇怪交互)...

我很难理解Python ctypes中LP_*(例如LP_c_char)和*\u p(例如c_char_p)指针之间的区别。是否有文件区分它们&#xff1f;在我所读到的关于*\p指针的一些信息表明它们更好(以某种未指明的方式)&#xff0c;但是当我试图将它们用作结构字段时&#xff0c;我会得到奇怪的行为。例如…

爱斯基摩结构

“爱斯基摩结构”&#xff1a;狗拉雪橇是生活在北极圈的爱斯基摩人最重要的运载工具。怎样才能让狗多拉快跑&#xff1f;爱斯基摩人将狗分成两个层次&#xff0c;前面是一只领狗&#xff0c;后头有&#xff2e;只力狗。他们给领狗制造许多特权&#xff1a;它单独享用食品&#…

如何将网页保存为图片_网页账号密码该如何保存?

我们在使用浏览器浏览一些网页的时候&#xff0c;需要输入我们的账号密码才能登陆&#xff0c;以保证安全。但是有时候浏览网页&#xff0c;不小心关掉了&#xff0c;重新打开时又要重新输入密码&#xff0c;这样会显得很繁琐。那么有什么办法能让网页记住我们的账号密码吗&…

scala学习-类与对象

类  /  对象 【《快学Scala》笔记】 一、类 1、Scala中的类是公有可见性的&#xff0c;且多个类可以包含在同一个源文件中&#xff1b; 1 class Counter{ 2 private var value 0  //类成员变量必须初始化&#xff0c;否则报错 3 4 def increment(){ //类中的…

LeetCode 1745. 回文串分割 IV(区间DP)

文章目录1. 题目2. 解题1. 题目 给你一个字符串 s &#xff0c;如果可以将它分割成三个 非空 回文子字符串&#xff0c;那么返回 true &#xff0c;否则返回 false 。 当一个字符串正着读和反着读是一模一样的&#xff0c;就称其为 回文字符串 。 示例 1&#xff1a; 输入&a…

字符指针与字符串变量的转换

VC.NET中的String类是利用Unicode字符集编码来表示文本。Unicode字符集中每个字符(汉字、英文字母)都占2个字节&#xff0c;且其字符串是以2个连续的/0结尾的。 ANSI的ASCII字符集是最常见的字符集&#xff0c;常用于表示txt的文本文件。在ASCII字符集中英文占一个字节&#…

直方图均衡 视觉显著_视觉图像:对比度受限直方图均衡化CLAHE

CLAHE源码解析&#xff1a;ContrastLimitAHE .h&#xff1a;#ifndef _CONTRAST_LIMIT_AHE_H_#define _CONTRAST_LIMIT_AHE_H_#include "stdafx.h"#include using namespace std;class ContrastLimitAHE{public:ContrastLimitAHE();~ContrastLimitAHE();int m_nGridX;…

5000并发的qps是多少_高并发架构设计

点击蓝字&#xff0c;关注我们01概述高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一&#xff0c;它通常是指&#xff0c;通过设计保证系统能够同时并行处理很多请求。高并发一方面可以提高资源利用率&#xff0c;加快系统响应速度&#xff0c;但是同…

TensorFlow 2.0 - tf.data.Dataset 数据预处理 猫狗分类

文章目录1 tf.data.Dataset.from_tensor_slices() 数据集建立2. Dataset.map(f) 数据集预处理3. Dataset.prefetch() 并行处理4. for 循环获取数据5. 例子: 猫狗分类学习于&#xff1a;简单粗暴 TensorFlow 2 1 tf.data.Dataset.from_tensor_slices() 数据集建立 tf.data.Dat…

一个使用指针的简单程序

一个使用指针的简单程序 /*一个使用指针的简单程序*/ #include <stdio.h> void main(){ int number 0; //一个出初始化为0的整形变量 int *pointer NULL; //一个可以指向int类型的指针 number 10; printf("\nnumber的地址为:%p",&number); //输出地址…

flutter 图解_【Flutter 专题】83 图解自定义 ACEWave 波浪 Widget (一)

和尚今天尝试一下绘制波浪的效果&#xff0c;虽然 pub 仓库中已经有成熟的插件&#xff0c;但和尚还是准备用之前学习的 Canvas 和 Animation 尝试自定义一个 ACEWave&#xff1b;1. 绘制曲线绘制波浪首先需要绘制曲线&#xff0c;采用 Canvas 绘制贝塞尔曲线&#xff1b;常用的…

c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了

小Hub领读&#xff1a;本文主要详细讲述常见的八种排序算法的思想、实现以及复杂度。包括冒泡排序、快速排序、插入排序、希尔排序等等&#xff0c;文章讲解非常详细&#xff01;作者&#xff1a;静默虚空https://juejin.im/post/5cb6b8f551882532c334bcf2本文已归档到&#xf…

Linux 下用C语言连接 sqlite

1.在 /home/ 新建一个文件夹名为 sqlite #cd /home #mkdir sqlite 2.编写C语言代码&#xff0c;名称为 sql.c&#xff0c;代码如下 // name&#xff1a; sql.c // This prog is used to test C/C API for sqlite3.It is very simple,ha! // Author : zieckey All rights rese…

c2c旅游springboot开源_重量级开源的商城和SpringBoot等项目看看有没有正好是你需要的...

1. JavaGuideGithub地址&#xff1a; 同下star: 18.2k介绍: 【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。2. mallGithub地址&#xff1a; 同下star: 3.3k介绍: mall项目是一套电商系统&#xff0c;包括前台商城系统及后台管理系统&#xff0c;基于Sp…

LintCode 1816. 使结果不超过阈值的最小除数(二分查找)

文章目录1. 题目2. 解题1. 题目 描述 给你一个整数数组 nums 和一个正整数 threshold &#xff0c;你需要选择一个正整数作为除数&#xff0c;然后将数组里每个数都除以它&#xff0c;并对除法结果求和。 请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个…