什么是CNN?机器学习入门贴,Facebook员工打造,47k访问量
2020-07-26 18:03:00
本文经AI新媒体量子位授权转载,转载请联系出处。
本文约2000字,建议阅读5分钟。
在图像分类时,面临着图像大,物体的形态、位置不同等问题,给普通的神经网络带来了难题,而卷积神经网络就是来解决这个问题。
看你是人还是物,是猫还是狗。
卷积神经网络(CNN)最重要的用途就是图像分类。说起来,似乎很简单。
为什么不使用普通的神经网络呢?
那是因为在图像分类时,面临着图像大,物体的形态、位置不同等问题,这就给普通的神经网络带来了难题。
而,卷积神经网络就是来解决这个问题。
Facebook软件工程师Victor Zhou这篇入门贴,就介绍了什么是卷积神经网络。
截至目前,已经有47k访问量了。
已经对神经网络有所了解的同学,一起来看看吧。
MNIST手写数字分类
首先,就以MNIST手写数字分类为例,这就是MNIST数据集的样本。
很简单,就是识别图像,然后将其分类为数字。
MNIST数据集中的每个图像均为28×28,我们看到,都是居中的灰度数字。
正常的神经网络其实就可以解决这个问题,首先将每张图像视为28×28=784维向量,将784维送到一个784维的输入层,堆叠几个隐藏层,然后用10个节点的输出层来完成,每个数字1个节点。
但这些数字居中,且图像较小,所以也就没有尺寸大、位置偏移的问题。但是我们知道实际生活中,情况并非如此。
好了,有了一个基本的了解之后,我们就进入了这个卷积神经网络的世界吧。
什么是卷积神经网络?
顾名思义,卷积神经网络就是基本上只是由卷积层组成的神经网络,卷积层是基于卷积的数学运算。
而卷积层是由一组滤波器组成,你可以将其视为二维矩阵的数字。比如,这是一个3×3滤波器。
将输入图像与滤波器结合卷积生成图像,这其中包括:
- 将滤波器叠加在图像的某个位置上。
- 在滤波器中的值和图像中的相应值之间进行元素乘法。
- 将所有元素的乘积相加。这个和就是输出图像中的目标像素的输出值
- 对所有位置重复进行。
这样说,可能有些抽象看不太懂。没关系,例子这就来了。
我们以一个微小的4×4灰度图像和一个3×3的滤波器为例。
图像中的数字就是我们日常见到的像素强度,其中0为黑色,255为白色,我们的输出设置成为、一个2×2的输出图像。
首先,将我们的滤波器叠加到图像的左上位置。
接着,将两个值(图像值和滤波器值)进行逐元素相乘。得到了如下的表格:
得出结果62-33=29。
以此类推,就可以得到2×2图像的数值。
卷积有什么用?
我们先把卷积的用途放一下,来看图。
这不就是刚刚3×3的滤波器吗?其实它还有一个专业的名字——垂直Sobel滤波器,对应的还有一个水平Sobel滤波器,就是中间横着的一行数字为0。
其实,Sobel滤波器是边缘检测器,垂直Sobel滤波器是检测垂直边缘,而水平Sobel是检测水平边缘。
这么说,可能不太明显。我们来看图。
是不是有点感觉了。
试想,如果两个滤波器都是用了,卷积是不是就能抓住图像的边缘特征了。
输出图像中的亮像素说明了原始图像的周围又很强的边缘。
这样一来,卷积就可以帮助我们寻找特定的局部图像特征,比如边缘。
填充
通常来说,我们其实都希望输出图像能够跟原始图像的大小相同。但在上面的示例中,我们是以4×4图像为输入,以2×2图像为输出,那应该怎么解决这个问题呢?
填充。这时候就要谈到0的妙用了。
就是要在图像周围添加一圈“0”,而滤波器则也需要填充1个像素。
这样,输出跟输入的图像具有相同的尺寸,叫做相同填充。
卷积层
卷积层就包含了上述的一组滤波器,卷积层的主要参数就是滤波器的数量。
对于MNIST CNN,如果使用带有8个滤波器的小型卷积层,那么输入为28×28,输出结果就变成了26×26×8 。
(因为是有效填充,它将输入的高度和宽度将减少2)
池化层
图像中的相邻i像素往往都有相似的值,而经过卷积层也就能在相邻像素中产生了相似的值。这样就会导致卷积层输出的很多信息都是多余的。
就如上述的负责边缘检测的滤波器,它能够在某个位置上找到较强的边缘,但是从很可能在其相邻的一个像素也能找到较强的边缘,这样就造成了两个相同的边缘同时存在。
这样的话,就造成了信息的冗余,不会发现新的信息。
池化就解决了这个问题。池化,就是通过将输入中的值集中在一起,减少输入的大小。
通常,是通过一个简单的操作来完成的,比如取max、min或平均值。
下面是一个最大池化层的例子,池化大小为2的最大池化层。为了执行最大池化,以2×2块遍历输入图像,并将最大值放入对应像素的输出图像中。
池化将输入的宽度和高度除以池大小。
比如,对于我们的MNIST CNN,我们将在初始转换层之后立即放置一个池大小为2的最大池化层。池化层会将26x26x8输入转换为13x13x8输出。
softmax层
实际上,最终完成CNN,还需要赋予其预测的能力。
那么,将通过使用多类分类问题的标准最终层:Softmax层,这是一个完全连接(密集)的层,它使用Softmax函数作为其激活的全连接(密集)层。
什么是Softmax函数?
给定一些数字,Softmax函数就能将任意数字转化为概率。
比如,我们选定数字 -1、0、3和5。
首先,我们需要计算e的指定数字次方,然后将其所有结果相加,当作分母。
最后,e的指定数字次方的值就作为分子,由此计算可能性。
而以MNIST CNN为例,将使用带有10个节点的softmax层作为CNN的最后一层,每个数字代表一个数字。层中的每个节点将连接到每个输入。
应用softmax变换后,由节点表示的概率最高的数字将是CNN的输出了。
好了,介绍了这么多。是不是能够很好的理解卷积神经网络了呢?
可以私戳下方链接了解更多哦~
传送门:
https://victorzhou.com/blog/intro-to-cnns-part-1/
https://victorzhou.com/blog/softmax/
编辑:王菁
校对:林亦霖
—完—
什么是CNN?机器学习入门贴,Facebook员工打造,47k访问量相关推荐
- 什么是CNN?写给小白的机器学习入门贴,Facebook员工打造,47k访问量
白交 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看你是人还是物,是猫还是狗. 卷积神经网络(CNN)最重要的用途就是图像分类.说起来,似乎很简单. 为什么不使用普通的神经网络呢? 那是因 ...
- 什么是 CNN?Facebook 员工写给小白的机器学习入门贴彻底火了!
公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 白交 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看你是人还是物,是猫还是狗. 卷 ...
- 我的机器学习入门清单及路线!
Datawhale干货 作者:桔了个仔,南洋理工大学,Datawhale成员 知乎:https://www.zhihu.com/people/huangzhe 这是我个人的机器学习入门清单及路线,所以 ...
- 机器学习入门学习资料推荐
今天介绍一些机器学习的学习资料,主要是分为以下几个方面的内容: 编程语言:实现机器学习,主要是介绍 Python 方面的语言: 书籍:看书通常是入门的一种方法,比较适合自律性强的同学: 视频:入门的第 ...
- 十年公务员转行IT,自学AI三年,他淬炼出746页机器学习入门笔记
整理 | Jane 编辑 | Just 出品 | AI科技大本营(ID:rgznai100) 近期,梁劲传来该笔记重大更新的消息.<机器学习--从入门到放弃>这本笔记的更新没有停止,在基于 ...
- 我的机器学习入门之路(中)——深度学习(自然语言处理)
继上一篇<我的机器学习入门之路(上)--传统机器学习>,这一篇博客主要记录深度学习(主要是自然语言处理)这一块内容的学习过程.以下均将自然语言处理简称NLP. 这一块内容的学习路线分为三部 ...
- MIT博士小姐姐的机器学习入门教程开课!碎片时间服用,每周一更 | 资源
铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 厌倦了千篇一律的机器学习教学课程怎么办?没有太多时间预算怎么学? 来点不一样的. 现在,两位MIT博士小姐姐搞了一套机器学习入门教程ML T ...
- 基于Jupyter Notebook从头学习机器学习 | 入门资料分享
乾明 编译整理 量子位 报道 | 公众号 QbitAI 热心分享机器学习入门资料的人越来越多了. 今天跟大家介绍的是一个名为ZekeLabs的机构推出的机器学习入门资料. ZekeLabs是一个位于 ...
- 【小白必读】机器学习入门须知
一.机器学习入门浅谈 机器学习领域,又或者更大而化之的说人工智能方向,因为"阿尔法狗"等一系列的热门爆点话题,被推到了人前,受到越来越多人的关注. 无论你是什么领域的工作者,都一定 ...
最新文章
- 用pandas.dataframe 的append()方法时候,合成的整个数据的索引是分块的
- Spring-AOP 自动创建代理
- 中央空调“国进外退”,格力、美的、海尔三大白如何角逐新市场?
- 波场php转,波场TRC20 Token PHP交互
- php判断数组是否存在字符串中,php判断数组元素中是否存在某个字符串的方法_php技巧...
- 【Linux】一步一步学Linux——wget命令(192)
- asp.net中让GridView加上垂直流动条并让标头不动
- php字符串search,js获取location.search每个查询字符串的值
- 基于Asp.Net Core MVC和AdminLTE的响应式管理后台之侧边栏处理
- CCNA2.0笔记_ACL
- java并发编程(二)多个线程多个锁
- 滴滴 AI Labs 负责人叶杰平因个人原因即将离职!CTO 张博接任
- 一旦有辞职念头就干不长了吗_辞职后,社保该不该管,是否影响养老金?需不需本人去社保局注销...
- 解决maven打包编译出现File encoding has not been set问题
- 国内开源的一款超好用 Redis 可视化工具,高颜值 UI,真香!!
- 使用DAEMON Tools Ultra制作Ubuntu启动U盘全过程(含图文)
- 关闭chrome 的内置PDF 查看器
- 【2019年04月30日】股息率分红最高排名
- GlobalMapper20转换KML为GeoJson,保留名称
- scikit-learn : LASSO
热门文章
- android+3e错误,Android 错误
- Win10 Terminal + WSL 2 安装配置指南,精致开发体验 - 知乎 (zhihu.com)
- 搭建免费ftp服务,视频演示
- 不焦虑、不内卷能拿图灵奖吗?来自智源研究院的灵魂拷问
- 《自然语言处理入门》不是 NLP 学习路上的万能药
- 程序员成长路上的团队修炼之道
- 用DCGAN训练并生成自己的图像集(含tensorflow代码)
- ValueError: fill value must be in categories.
- 安装Anaconda创建虚拟环境以及在pycharm中使用虚拟环境
- 独家 | 数据转换:标准化vs 归一化(附代码链接)