Python与人工神经网络(12)——卷积神经网络
来源:互联网 发布:京东秒杀抢购软件 编辑:程序博客网 时间:2024/05/21 09:48
卷积神经网络才用了三个概念:局部感受域(Local receptive fields),共享权重(shared weights),和池化(pooling),下面分别介绍。
局部感受域
其实,之前我们使用的神经网络有一个很奇怪的地方:每一层的每个神经元,都与其他层的每个神经元之间有连接。这也就是说,在以前,我们默认,图像的每个像素都与下一层要计算的内容有关联。然而对于图像这种特定的媒介,像素之间有着天然的空间关系,因此我们可以在这上面做文章:我们可以一块区域一块区域的整体往下一层连接,这样的区域,就叫局部感受域。比如我们的图像是28*28像素的,那就可以选取5*5像素作为一个局部感受域,这个范围内的输入神经元连接到下一层的某个神经元,而其他的输入神经元则不连这个神经元,如图:
需要注意,每个5*5的像素范围都应该当作一个局部感受域,都应该对应下一层的一个神经元,28*28的输入神经元,第一层隐藏层有24*24个神经元。也就是说,局部感受域之间,是能有重复的神经元的,如图:
共享权重
在以往的神经网络中,每个神经元都自己的权重w值和偏移量b值。这次,我们使用共享权重和偏移量,也就是说,对于输入层,一个局部感受域,只有只一个权重。用公式表示,隐藏层中第j行第k列的神经元的值就是:
其中w[l][m]就是响应的局部感受域的权重。
局部感受域有啥用呢:直观来说就是特征提取,也就是提取这5*5范围内的一个特征值。所以经常会把这种从输入层到隐藏层的映射叫特征映射,我们用到的共享权重和共享偏移量叫卷积核或者滤波器。
当然一组卷积核,只能提取出一组特征值,所以经常来所,会多用几组,也就是能在相同的区域内检测出多种特征,如图展示了3组的情况:
由于上面的那个方程经常被叫做卷积操作,所以第一个隐藏层也通常被叫做卷积层。
池化
卷积层之后就是池化,也就是简化卷积层的信息。简单来说,池化层从卷积层获取每一个特征值,并将他们进行一个概括。对于24*24的卷积层,我们选一个概括区域比如2*2,找一种方法计算这个范围内的概括值,比如最大值,就得到了池化层的一个神经元的值,如图:
需要注意的是,这次的概括范围之间没有重复了,所以24*24的卷积层,得到的结果是12*12的池化层。刚刚说的最大值,是确有其事,就叫最大值池化法,当然也还有其他方法比如L2池化法等等,这里就不介绍了。
每一个特征图,都应该对应一个池化图:
综合
综合就不用说太多啦,一张图:
最后的十个神经元就是代表十个数字的输出神经元了。
下期,我们就来实现卷积神经网络。
欢迎关注我的微信公众号获取最新文章:
- Python与人工神经网络(12)——卷积神经网络
- Python与人工神经网络(13)——实现卷积神经网络
- Python与人工神经网络(14)——其他技术
- Python与人工神经网络(2)——使用神经网络识别手写图像
- Python与人工神经网络(10)——神经网络可以干什么
- Python与人工神经网络(11)——为什么深度神经网络很难训练
- Python与人工神经网络(6)——过度拟合与正则化
- Python与人工神经网络(1)——开一个新坑
- Python与人工神经网络(3)——随机梯度下降算法
- Python与人工神经网络(4)——反向传播算法
- Python与人工神经网络(5)——交叉熵成本函数
- Python与人工神经网络(7)——其他正则化方法
- Python与人工神经网络(9)——其他改进技术介绍
- Python与人工神经网络(15)——结语和前言
- 神经网络 与 卷积神经网络
- BP神经网络与卷积神经网络(CNN)
- BP神经网络与卷积神经网络(CNN)
- 模式与人工神经网络
- HHKB电流
- PAT B1009.说反话
- APUE之全缓冲、行缓冲、无缓冲
- QString 转 char*
- SQLserver模糊查询
- Python与人工神经网络(12)——卷积神经网络
- MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)
- xml
- json数据解析,json数据转为java对象
- 学习struct2第二天
- 顺序表基本操作【严蔚敏】
- java入门基础--加密JDK自带的包
- 数据库基础命令
- Linux上使用Pomodoro Technique(番茄工作法)软件