Python与人工神经网络:使用神经网络识别手写图像介绍
作者:mengwei 发布时间:2022-05-23 03:11:36
人体的视觉系统是一个相当神奇的存在,对于下面的一串手写图像,可以毫不费力的识别出他们是504192,轻松到让人都忘记了其实这是一个复杂的工作。
实际上在我们的大脑的左脑和右脑的皮层都有一个第一视觉区域,叫做V1,里面有14亿视觉神经元。而且,在我们识别上面的图像的时候,工作的不止有V1,还有V2、V3、V4、V5,所以这么一看,我们确实威武。
但是让计算机进行模式识别,就比较复杂了,主要困难在于我们如何给计算机描述一个数字9在图像上应该是怎样的,比如我们跟计算机说,9的上面是一个圈,下右边是1竖。然而有的人写9会带勾,有的人还会在圈周围多出点什么,总的来说,这种描述法太容易出现其他状况。况且,我们这里讨论的还只是数字,涉及到字母、汉字、符号就回更复杂。
于是人们就有了另外一种途径,那就是我们不用告诉计算机什么是9,我们可以把他当作一个小孩子,让他见很多9的图片,对他说,这是9,记得哈。慢慢的他就形成了自己的评判标准,等他长大了,自然就知道以后遇到的图片是不是9了。让我们人学习的方式是见闻,让计算机学习的就是给他数据,这个数据通常被叫做训练样本(如图),而这套学习的方法,就是神经网络了。
感知机(Perceptrons)
在说人工神经网络之前,我们先说另外一个人工神经元系统,叫感知机(Perceptrons)。感知机模型是这样的:
其中x1,x2,x3是二进制的输入值,output是二进制的输出值。在每个输入端,还会有一个权重,w1,w2,w3。output取决于x1*w1+x2*w2+x3*w3,如果他小于等于一个临界值的时候,output就输出0,大于等于那个临界值的时候,output就输出1。当然输入值可以是任意多个,用公式表示就是:
output={01if ∑jwjxj≤ thresholdif ∑jwjxj> threshold
感知机模型就这么简单,他是一个相当好的决策系统,用来解决是或者不是,去或者不去,熟悉我的朋友可能知道我从古代儒家修身的功过格受启发,自己制定的一套决策系统,也是用因素*权重然后汇总,看得到的正面因素占优还是负面的因素占优,最后做决策,真是相当好用,只不过那时候还不知道感知机模型。
我们把Σwjxj用w·x表示,把临界值提到等号右边,用-b表示,那么上面的等式就如下所示:
b一般称作偏差。
既然有一层的感知机模型,多层的就很好理解了,如图:
这个多层(从左到右)的感知机里面,第一层的感知机比较简单,只根据输入的值和权重就可以得出结果,第二层的结果就得根据第一层的结果和相应的的权重了,与复杂度相对应,他也就可以用来做更加复杂和抽象的决定,第三层就更复杂了。
这种上世纪五十年代就出来的神经元系统功能强大,但是对于机器学习有一个重大的缺陷。我们教小孩子的时候,小孩子进步一点点,我们就鼓励他一下,小孩子退步一点点,我们就批评一下,他从我们的批评和鼓励中自动的去调整自己的认知,慢慢的成长。但是这个感知机就不同了,他的输入值只有0和1,他的成长没有一点点的说法,所以压根就不知道怎么调整,可能内部参数调整的乱七八糟,输出的结果还是不变的。要实现学习和进步,就得有这么一点点一点点进步的概念,也就是说,w或者b变了一点点,那么输出值就得变一点点,总的来说,就是要实现下图所示的效果:
于是新一代的神经元系统就出世了,他叫S曲线神经元系统(Sigmoid neurons)。
S曲线神经元系统(Sigmoid neurons)
简单来说,S曲线神经元系统和感知机系统的区别在于我们的输入值x1,x2,x3和输出值output都不是0和1了,改为从0到1之间的任何实数。而且规定,对我输出值output,由于是与w·x和b相关的,我们可以用σ(w·x,b)表示,他满足函数:
把w·x和b带进去,就是:
试着看下,如果当w·x + b→+∞的时候,e^-(w·x+b)→0,σ(w·x,b)→1。相反,当w·x + b→-∞的时候,σ(w·x,b)→0,所以,感知机系统也是一个特殊的S曲线神经元系统。
至于为什么σ(w·x,b)必须满足上述的函数呢。请看σ(z)的图形:
他的定义域是(-∞,+∞),值域是(0,1),也就是说,不管w·x和b怎么折腾,总能保证输出值在0到1之间。特别的,当我们对一个事情做决定时,比如我们让计算机决定看到的一个图形是不是9,0到1之间的一个数,可以在物理意义上对应他是9的概率。(我后来才意识道,这个说法是错误的)
我们说,我们抛弃感知器,采用S曲线神经元系统,是为了让输出结果的变动和我们采取权重w和偏离b的变动对应起来。那么对于方程output = σ(w·x,b),由于输入值x是已知的常数,根据全微分的定义,有:
输出值的变动和我们选用的参数变动就对应起来了。
构造我们的神经网络
在我们构建神经网络的过程中,一般也会把输入的数据当作神经元,输入的那层叫做输入层,中间可能有多层,通常被叫做隐藏层,输出的那一层就叫做输出层。如图:
在设计神经网络时,一般会采取简单粗暴的方式,比如我们要让计算机识别手写稿的扫描件图像,其中的一个字的图像像素个数是64*64=4096个,那么我们设计神经网络的时候,输入层神经元个数就是4096个,其中每个神经元的输入数据就是该像素的灰度值(参照文章的第一幅图)归一化成0到1之间的数值。而我们要识别出的结果,可能包括数字0-9加26个大大小写字母再加六千常用汉字,那我们设计的输出层神经元个数就用过是10+26*2+6000=6062个,其中每个神经元对应一个我们要识别的结果。
具体到本实例中,训练样本和识别测试数据是28*28像素的,输出结果只有10个数字,那么输入层就应该是786个神经元,输出层是10个神经元。至于中间隐藏层的神经元,作者选了15个,说是经过了多次实验,15个的效果比较好。就我的理解,应该是越多约好的(不一定正确),不过越多也意味着运算量越大,所以作者最后选了15个。最终设计的结果如图:
最后还有一个问题,如果是连续的书写手稿,怎么把他分割成一个个的。作者说实际上这个问题可以在我们完成通过神经网络进行识别之后再说,因为识别出来谁都不像的,就说明应该要分割了,那我们也就跟着作者的思路,暂时先不管。
总结
神经网络理论基础及Python实现详解
神经网络python源码分享
70行Java代码实现深度神经网络算法分享
如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
来源:http://www.knowsky.com/1044488.html
猜你喜欢
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- 前言图像分割是指根据灰度、色彩、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域。最简单的图像分割就是将物体从背景中分割出来1.图像
- 环境Win10Python3.6.6Django2.1.3中间件作用 中间件用于全局修改Django的输入或输出。中间件常见用途 缓存会话认
- 最近做网站期间遇到个问题,就是用到比较流行的lightbox效果,就是点击链接后会弹出个固定大小窗口,弹出后窗口下面的内容是被遮罩掉的,最近
- 本文实例讲述了Python使用matplotlib和pandas实现的画图操作。分享给大家供大家参考,具体如下:画图在工作再所难免,尤其在做
- 前端开发部门在壮大,人员在增加,技术在进步。CSSer虽然不能代表前端开发团队,但CSSer是前端开发中非常重要的组成部分。一、文档写程序的
- 无法打开用户默认数据库,登录失败,这也是SQL Server使用者熟悉的问题之一。在使用企业管理器、查询分析器、各类工具和应用软件的时候,只
- ie的javascript失效了,不是设置的问题那么就可能是以下几点问题了~安装KAV可能会破坏系统的javascript关联,失javas
- 前言:过完520,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。多的不说直接进入正题人人对战游戏规则:p1为黑子,p2为白子,黑子先手
- 微软最近出了个 必应bing 缤纷桌面,使用下来还是不错,可以每天更换Bing首页的北京作为壁纸,但是该软件有个不好的地方是,安装后桌面上会
- 如何用数据库制作一个多用户版的计数器?代码和说明如下:count.asp' 计数器的核心程序<%Set c
- 我们经常会遇到多重查询问题,而长长的SQL语句往往让人丈二和尚摸不着头脑。特别是客户端部分填入查询条件时,如用普通方法将更是难上加难。以下巧
- 超如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等。那么, Pyth
- 多个Python版本:在同一台机器上安装不同的Python,例如2.7和3.4。虚拟环境:独立的环境,既可以同时安装特定版本的Python,
- 这个只是一个简单的比较无聊的尝试,类似blog等一些网站的换肤功能都是以此方式改变网站的皮肤。对于这些方法大家会的比较多,没啥说的。主要我是
- sql2000的服务器版本是8.0,sql2005是9.0首先要读安装必须配置(见后记)1.我是先装2000的,安装好后打上sp4补丁,(s
- 本文实例为大家分享了python实现人脸签到系统的具体代码,供大家参考,具体内容如下简易版人脸签到/签退系统管理员可进行录入人脸操作,以及导
- 以前我浏览博客的时候记得别人说过,BCELoss与CrossEntropyLoss都是用于分类问题。可以知道,BCELoss是Binary
- 我们可以利用 Cookie collection 来刪除客户端的Cookies: <%
- 1. 下载可以去清华源下载最新版的anaconda包,这比在官方网站下载快得多,地址如下:https://mirrors.tuna.tsin