讲人工神经网络之前,先说一下生物神经网络:一般指生物的大脑神经元,细胞,触点等组成的网络,用于产生生物的意识,帮助生物进行思考和行动。相比之下,人工神经网络之所以有人工二字,就是人工模拟生物神经网络的行为特征,来建立一种可以模仿生物行为模式进行信息处理计算的数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。没错,其本质就是数学模型!我不知道茫茫读者中有多少人喜欢数学,反正我是不(gen)太(ben)喜(bu)欢(hui)。所以下面我的讲解中,我会尽量避开枯燥的公式,但争取做到你能理解,会使用!

图1

图1是展示的是人类和机器人的对话,以及他们大脑的构造,我们来一一解析:

神经元

神经元是构成神经系统结构和功能的基本单位,它的本质是一个具有长突起的细胞,也是它构成了我们的生物神经网络。它的功能是接受刺激,产生兴奋并传导兴奋。

图2 神经元及信息传输

图2上半部分就是一个完整的神经元,上部圆圆的是它的细胞,中间黑色的是细胞核。周围长了很多树突,用于接收其他神经元传递来的信息。图中间那个长长的东西叫轴突,用于把信息传送到下面的突触…上面套一节一节的东西是髓鞘,这个东西最主要的作用是能避免在信息传输过程和其他的轴突出现的电气干扰,你可以理解为这是一个线程安全的机制吧…(当然还有另外的作用,像是加速传导和引导修复)千万别小看这个小东西!如果它坏掉了,那指定是嘴歪眼斜大小便失禁!末端的突触,就是信号的发射器了,看到图中突触的地方有华丽的亮光的特效了没,那就是上面的神经元正在把兴奋地信号传递给下方的神经元!

上述这段这纯属是本人的拙见,如有专业人士,切莫过于认真!

人工神经网络

图3 BP神经网络简单模型

我们讲解的人工神经网络是BP神经网络(Back Propagation Neural Network)。BP神经网络是一种按误差逆向传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。

我用人话解释一下啊:BP网络的基本思想由两部分组成:

第一部分是样本信息正向传播并且输出结果。如图3,整个网络模型中,信息的传递从输入层(input)开始,按照正向(从左往右)一层一层的传递“信息”,每一条线代表一条连接(连接也就意味着一次传递),箭头的方向表明信息传递的方向,当某个节点接收到上一层所有节点传递而来的“信息”,就会进行一次计算,计算的结果作为本节点的输出,传递到下一层的每一个节点中。直至输出层,经过计算把最后的结果输出。图中的隐藏层只有一层,但我们的BP神经网络是多层网络,也就是说隐藏层可以有好几层。

第二部分就是误差的反向传播,更新网络中的权重。通过上面的介绍我们知道了,信息传播结束之后,输出层的每个点都会输出一个数,用这个数和我们人工给出的正确数据进行比较,也就是上篇文章我们提到过的人工打标的数据。求出误差(常用误差计算公式有均方差或交叉熵等),这时厉害了,这个误差通过某些梯度下降算法的计算后,结果会更新到每条连接中,通过每条连接给传递的参数带来一次变化,也就是更新了连接的权重,经过更新权重处理,传入下一层每个节点的数发生了细微的变化,这也直接影响到了最终输出的结果,使之下次计算出的误差变得越来越小,循环此过程使最终输出不断趋近甚至等于我们人工给出的正确数据!从而得到正确的输出。这就是一次信息正向传播,误差反向传播的过程,通过不断重复这个过程,达到了该网络自我修正,自我学习的特性。

至于传递的“信息”是什么,加的“权重”又是什么,每个节点要怎样去计算,每一层结点的数量是怎么来的?且听我下文慢慢道来。

传递的“信息”是什么

咱们先来聊聊,传递的信息是啥吧!input作为输入层,所有数据的输入都源自这里,这里完全可以理解为传入的是图片的每个像素点。比如你的图片是 10*10的长宽,那input层节点的数量就是100个,前期我们对验证码进行训练的时候就这样去做就好。以后如果我们对图像进行处理,特别是那些2000*2000的以上分辨率的图片,由于像素点过多,我们对图像进行特征提取,这样可以降低输入的维度(数量)并且提高训练的速度。后面如果涉及到再细细讲解。

这个点的灰度值传入之前,我们最好对其进行预处理,可以提高训练的速度!这边我们用一个最最简单的预处理办法,归一化。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为标量。 在多种计算中都经常用到这种方法。

我在用人话解释一下:归一化的意思就是把你将要进行处理的数据,进行统一的一次加工,加工后,相当于把所有的数据按照等比例缩小了!(这里只是泛泛而谈,最优的方案是让所有数据均值为0,方差为1,范围控在-1~1之间,在这里并不需要做的如此精确)这样能把结果限定在一个更小的范围内,方便归纳统计!我们这里可以把范围控制在0~1之间。而且还能提高你训练的收敛速度。具体怎么去操作呢?通过前几篇文章我们已经知道了灰度值的范围是0~255了,我们把每个像素点的灰度值除以255,就会得到一个0~1之间的数,这就是归一化之后的数据了,要注意,每一个像素都要进行归一化处理哦!

“权重”是什么

权重为整个模型的精妙之所在!可谓是万变之根源,训练之核心!权重的计算公式为:ΣWA+B,其中A为上一个节点的输出,W就是权重值,B为偏移量。

每次信息传递完毕之后会得到一个误差,这个误差会分配到网络中的每一个连接之中(也就是每条线),通过控制公式中W和B的变化,使每次传递的参数发生变化,来修正每次训练的输出,不断地收敛来缩小误差,真正实现自适应、自学习,这才是一个“活”的模型!理解了吧!

隐藏层和输出层的计算是什么?

这个计算,就是传说中的激活函数(activation function),这个名字的含义比较抽象。他主要作用是通过计算,把特征保留并且映射出来。激活函数是非线性函数,下面展示几种常用的激活函数:

图4 常用的激活函数

实在是不理解?没关系!你只要理解为,这是一次计算就可以了!每一层隐藏层的激活函数都是固定的,虽然说不同的隐藏层可以使用不同的激活函数,但是通常来讲,很少会把各种激活函数串联起来使用的。其中Relu是现在收敛最快,计算量相对较小的激活函数,推荐使用。激活函数几乎可以说是纯粹的数学,正某人本想单开一篇讲解激活函数,但过于枯燥有违我们整体风格,等这一系列连载完再单独讲解吧!等不及想一探究竟的同学可以直接去问度娘。

看到这里,你几乎具备了关于BP神经网络所有的理论知识了,难理解吗?幸运的是,现在有很多成型的工具实现了训练模型的方法,在使用中,你几乎不需要去关心我上述讲的任何一个步骤是怎样实现的。说这么多只是希望有了理论的支持,在用的时候可以了解每一步骤的用处,知道如何正确的调参

图像识别(3)---验证码篇相关推荐

  1. 图像识别(2)—验证码篇

    图像识别-验证码篇(2) 分割 分割就是把验证码切开,分成一个一个的字符,好方便识别的过程.现在的识别技术大多数都是单个字符去训练识别的,并不是说不可以整张的去训练识别,可是那样需要成吨的训练样本和时 ...

  2. 图像识别(1)---验证码篇

    图像识别-验证码篇 本文介绍了图像识别领域应用到验证码破解中的第一课,以一种极简的,学习成本极低的方式,带你初识AI,初识图像识别. 如果您对图像识别类的内容或者课程感兴趣,敬请关注我们的订阅号 介绍 ...

  3. js逆向验证码篇之极验4代

    提示!本文章仅供学习交流,严禁用于任何商业和非法用途,如有侵权,可联系本文作者删除! 网站链接:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vYWRhcHRpdmUtY2FwdGNo ...

  4. 【人工智能】图像识别之小白天书——验证码篇(2)

    介绍 哈喽!久等了各位!对于上一篇文章的戛然而止,我正某人在这里先给大家赔不是了.不过话说回来,这也是秉承着我们互联网"小步快跑"的原则嘛!每次只学一点点,但是我们永不止步!当你在 ...

  5. Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术

    滑动验证码介绍 本篇博客涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成. 这类验证码不常见了,官方介绍地址为:https://promotion.a ...

  6. 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  7. python图像识别代码_用Python进行简单图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

  8. 图像识别技术——验证码识别

    一.数字图像处理基础 一幅图像可以定义为一个二维数组f(x,y),这里x,y是空间坐标,而在任何一对空间坐标(x,y)上的幅值f称为该点图像的强度或灰度.当x,y和幅值f为有限的.离散的数值时,称该图 ...

  9. python实现图像识别_利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt ...

最新文章

  1. 如何手动生成Dump文件并分析Dump文件
  2. BZOJ3019 : [Balkan2012]handsome
  3. centos安装python3.8
  4. 深度学习的实用层面 —— 1.3 机器学习基础
  5. 【Python】os库介绍
  6. 小米公寓,年轻人的第一套公寓?回应来了
  7. php 重定向 post,使用php curl getpost方法向页面文件发送重定向指令
  8. markdown 折叠目录_Markdown秒变PPT
  9. sh linux 一组命令,linux中的组命令和子shell
  10. python 成语库_python实现成语找一找
  11. mnist手写数字识别与优化
  12. 【转载】.btc勒索病毒删除+还原文件(Dharma家族新成员)
  13. java手机游戏吸血鬼_Java 吸血鬼数字
  14. 重建windows系统的引导盘(亲测可用)
  15. PyCharm中集成Arcpy环境
  16. java基础学习—— 六
  17. w10系统excel无法启动服务器,w10excel无法打开怎么办_解决win10系统无法打开excel的方法...
  18. skipnetworking mysql_MYSQL-skip-networking
  19. uni-app云打包与本地打包
  20. 如何替换掉apk中的配置

热门文章

  1. java 内省机制_Java反射与内省机制总结
  2. oracle如何添加undo,ORACLE RAC 11G 添加以及删除UNDO表空间
  3. 【重难点】【JUC 05】线程池核心设计与实现、线程池使用了什么设计模式、要你设计的话,如何实现一个线程池
  4. 2017提高组D1T1 洛谷P3951 小凯的疑惑
  5. 实现div在固定区域跟随鼠标移动点击拖动而产生的变化
  6. UVA571 - Jugs(数论)
  7. bootstrop 日期控件 datepicker被弹出框dialog覆盖的解决办法
  8. (学习进度表)【第八周】
  9. 优秀的云存储解决方案Dropbox,现在注册就有2G
  10. VMware Workstation 与 Server 的区别