浅谈神经网络(二)

神经网络中可以改变的有:

1、各神经元的权值

2、bias,广义上,也是权值

3、激活函数

4、神经网络的层数

5、各层神经元的个数

6、神经网络的连接结构

7、输入输出的格式和质量

下面我们一项一项进行说明,如何改变这些参数

一、权值

权值的改变分为 有监督的学习 和 无监督的学习

1、有监督的学习Supervised Learning

给定许多样本(包含输入与输出),将输入数据通过神经网络后,产生的实际输出和期望输出进行比较,通过差值逐步调整各神经元的权值和bias,两个问题:

(1)期望输出是什么?

期望输出就是给定的样本的输出,而实际输出就是输入经过神经网络后产生的输出

(2)各权值初始化的值为多少?

初始化权值随机分配,比如C语言中利用rand()函数(随机产生0-RAND_MAX之间的数),初始化权值为-1到1之间:w[i][j]=rand()*2.0/RAND_MAX-1;

2、无监督的学习UnSupervised Learning

大概思想是:当两个神经元同时处于激发状态时两者间的连接权会被加强,否则被减弱。

注:关于训练算法有以下这些:

BP算法、...(留待后续补充)

......

算法多多,就像C语言中一个排序就有那么多算法一样,神经网络的训练算法有这么几种也不足为奇。

二、激活函数

(1) 线性函数 ( Liner Function )

Matlab中可以使用:purelin函数

(2) 阈值函数 ( Threshold Function )

Matlab中可以使用:hardlim和hardlims函数,值域分别为[0,1]和[-1,1]

(3) S形函数 ( Sigmoid Function )

Matlab中可以使用:logsig函数

(4) 双极S形函数

Matlab中可以使用:tansig函数

(5)后续补充...

......

三、输入输出的质量和格式

输入输出数据的质量:保证输入数据准确完整等等就行,这里不做深入讲解,具体可以看看数据预处理。

输入输出数据的格式:这里涉及到的就是数据的归一化问题,这里简单说一下。

1、什么是归一化?

归一化就是利用一定的算法,将输入输出数据归一化到[0,1]或者[-1,1]之间

2、为什么要归一化?

(1)输入输出的单位不一样(比如输入是温度,输出是电流),范围不一样(比如输入数据之间数值相差很大),会导致神经网络的收敛速度变慢、训练时间变长;

(2)数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小;

(3)激活函数本身的输出是有范围的,比如用sigmoid函数,其值域范围为[0,1],这样就要求必须将输出数据映射到[0,1]上面,也就是输出数据的归一化问题;

(4)sigmoid函数在[-5,5]范围之外偏向饱和,函数值之间差别太小,很难进行训练,比如f(5)和f(100)只相差0.0067,因此,我们取有效区间[-1,1],将输入数据映射到[-1,1]

上面,方便进行训练,这也就是输入数据的归一化问题;

3、如何进行归一化?

(1)y = ( x - min )/( max - min),那么数据x就化简到[0,1]之间了。(编程中,可以y = ( x - min + A )/( max - min - A),加上A防止分母为0)

(2)y = 2 * ( x - min ) / ( max - min ) - 1,那么数据x就化简到[-1,1]之间了。(C编程中,可以采用 y = rand()*2.0/RAND_MAX-1)

时间: 2024-10-29 19:12:14

浅谈神经网络(二)的相关文章

浅谈DevExpress<二>:设计一个完整界面(2)

下面来把剩下的工作做完,换肤功能昨天已近讨论过,今天就不重复了.首先建立三个全局变量,一个存放文件路径,一个存放数据,一个存放过滤条件. string DBFileName; DataView dataView; string[] filter = new string[3]; 取得数据并绑定到表格中: DBFileName = DevExpress.Utils.FilesHelper.FindingFileName(Application.StartupPath, "Products.xml&

浅谈DevExpress<二>:设计一个完整界面(1)

昨天谈了界面的换肤问题,今天拿一个简单的界面来介绍一下怎么设计一个五脏俱全的界面,总体效果如下图(种类的图片随便找的^^): 创建一个winform项目,在上面拉进去一个bar管理器和图片列表: 在菜单栏.工具栏和状态栏中,分别加入菜单.编辑栏.按钮和静态文本: 菜单栏改名并设置好图片: 然后改工具栏项的属性,拿第一个举个例子,后面的大同小异,选择EditItem后先将其PaintStyle属性改为CapationGlyph,然后找到Edit,选择CheckEdit,就会变成下面的样子: 依法炮

Android开发-浅谈架构(二)

写在前面的话 我记得有一期罗胖的<罗辑思维>中他提到 我们在这个碎片化 充满焦虑的时代该怎么学习--用30%的时间 了解70%该领域的知识然后迅速转移芳草鲜美的地方 像游牧民族那样.原话应该不是这样,但是我想说的是 自从我想写一些笔记记录知识的时候 为了不误导其他人 我不得不参考github 一些比较知名大牛的代码.在这个过程中 我下载过很多demo.一点一点的啃 汲取精华的部分 当然也充满疑惑.后来觉得标题取得有点大了 我应该取"学习"类的标题才对.但是另一方面我也只能就

浅谈神经网络(一)

到底什么是神经网络呢? 在陷入各种各样概念.名词.理论之前,请务必提醒自己,只有从整体上理解到底什么是神经网络,之后的深入学习才不至于迷失方向. 请看下面三张图: 图一图二图三 这三幅图跟就能很好的对神经网络进行一个整体的描述:神经网络就是一个黑箱,和人脑一样. (1)我们给这个黑箱一些输入和输出,这个黑箱就能够自动去寻找这些输入和输出之前的关系,等以后我们再输入一些东西时,他们便能给出我们一些输出. 就跟人脑一样,我们不停的输入一些人,输出对应性别,等脑子慢慢学习和长大,以后再看到一些人,就能

Qt浅谈之二十一log调试日志

一.简介 最近因调试code时,想了解程序的流程,但苦于没有一个简易的日志记录,不停使用qDebug打印输出,而最终提交代码时得去多次删除打印信息,有时还会出现新修改的代码分不清是哪些部分.而使用#ifdef _DEBUG又比较烦这套,因此写了些简单的日志,方便排除问题,暂时不能用于多线程中,以后需要再补充. 二.详解 1.追踪函数 #ifdef _DEBUG_PRINT #define DEBUGPRINT DEBUGInfo printinfo(__FILE__, __LINE__, __F

浅谈Nginx(二)—http下server配置

此文介绍Nginx下的http模块,着重介绍http模块下的server服务 --------依据"马哥教育"主讲人马永亮导师的上课笔记整理------- 目录  一. http相关的基本配置:     1) listen                2) server_name           3) tcp_nodelay     4) sendfile      二. 定义路径相关的配置:     1)root path     2)location     3)alias 

浅谈神经网络中的bias

1.什么是bias? 偏置单元(bias unit),在有些资料里也称为偏置项(bias term)或者截距项(intercept term),它其实就是函数的截距,与线性方程 y=wx+b 中的 b 的意义是一致的.在 y=wx+b中,b表示函数在y轴上的截距,控制着函数偏离原点的距离,其实在神经网络中的偏置单元也是类似的作用. 因此,神经网络的参数也可以表示为:(W, b),其中W表示参数矩阵,b表示偏置项或截距项. 2.bias的计算方式? 神经网络结构中对偏置单元的计算处理方式有两种, 

Qt浅谈之二十App自动重启及关闭子窗口(六种方法)

一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 [cpp] view plaincopy int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; MyDialog dialog;                      //新建MyDialog类对象 if(dia

Qt浅谈之二十七进程间通信之QtDBus

一.简介 DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,DBus使得Linux变得更加智能,更加具有交互性.        DBus分为两种类型:system bus(系统总线),用于系统(Linux)和用户程序之间进行通信和消息的传递:session bus(回话总线),用于桌面(GNOME, KDE等)用户程序之间进行通信. 二.详解之Qt代码 1.代码一 (1)test.h [html] view plain copy