白交 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

看你是人还是物,是猫还是狗。

卷积神经网络(CNN)最重要的用途就是图像分类。说起来,似乎很简单。

为什么不使用普通的神经网络呢?

那是因为在图像分类时,面临着图像大,物体的形态、位置不同等问题,这就给普通的神经网络带来了难题。

而,卷积神经网络就是来解决这个问题。

Facebook软件工程师Victor Zhou这篇入门贴,就介绍了什么是卷积神经网络。

截至目前,已经有47k访问量了。

已经对神经网络有所了解的同学,一起来看看吧。

MNIST手写数字分类

首先,就以MNIST手写数字分类为例,这就是MNIST数据集的样本。

很简单,就是识别图像,然后将其分类为数字。

MNIST数据集中的每个图像均为28×28,我们看到,都是居中的灰度数字。

正常的神经网络其实就可以解决这个问题,首先将每张图像视为28×28=784维向量,将784维送到一个784维的输入层,堆叠几个隐藏层,然后用10个节点的输出层来完成,每个数字1个节点。

但这些数字居中,且图像较小,所以也就没有尺寸大、位置偏移的问题。但是我们知道实际生活中,情况并非如此。

好了,有了一个基本的了解之后,我们就进入了这个卷积神经网络的世界吧。

什么是卷积神经网络?

顾名思义,卷积神经网络就是基本上只是由卷积层组成的神经网络,卷积层是基于卷积的数学运算。

而卷积层是由一组滤波器组成,你可以将其视为二维矩阵的数字。比如,这是一个3×3滤波器。

将输入图像与滤波器结合卷积生成图像,这其中包括:

  1. 将滤波器叠加在图像的某个位置上。

  2. 在滤波器中的值和图像中的相应值之间进行元素乘法。

  3. 将所有元素的乘积相加。这个和就是输出图像中的目标像素的输出值

  4. 对所有位置重复进行。

这样说,可能有些抽象看不太懂。没关系,例子这就来了。

我们以一个微小的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访问量相关推荐

  1. 什么是 CNN?Facebook 员工写给小白的机器学习入门贴彻底火了!

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 看你是人还是物,是猫还是狗. 卷 ...

  2. python小白从哪来开始-写给小白的工程师入门 - 从 Python 开始

    题图:pexels 这是我面向小白写的 Python 编程教程的第一篇.周三已经抓勺子同学上完了这节课,得到了很多珍贵反馈,于是我把讲义初版又修改了一遍,放到⌈影子练习SinanTalk⌋上来. 原本 ...

  3. 什么是CNN?机器学习入门贴,Facebook员工打造,47k访问量

    2020-07-26 18:03:00 本文经AI新媒体量子位授权转载,转载请联系出处. 本文约2000字,建议阅读5分钟. 在图像分类时,面临着图像大,物体的形态.位置不同等问题,给普通的神经网络带 ...

  4. 写给小白的机器学习之数据表示与特征工程详解(附实战代码)

    数据类型有很多,在机器学习中,这些类型基本特征大致分为两类: 一是如浮点数组成的连续特征 二是通常并不是数值的分类特征,或者叫做离散特征 通常无论你的数据包含那种类型的特征,数据表示方式都会对机器学习 ...

  5. 写给小白的机器学习之决策树算法详解(附实战源码)

    这里是实战源码,里面算法参数解释和数据可视化详解 GitHub慢的话看码云 具体ppt也已上传至csdn和GitHub 可以做分类树和回归树 现在是一个多分类任务 PPT讲解 强壮性是对若有缺失值等其 ...

  6. 黑苹果固态硬盘_写给小白的黑苹果入门指南

    1月底折腾目前这套黑苹果,到现在开始有点心得,知道个中的懵逼跟难处,特意发一文给各位新手小白解惑. 挑选合适的配置 CPU: 虽然AMD的CPU已经可以吃上黑果,但某些软件,例如Adobe全家桶会出现 ...

  7. 写给小白的云计算入门科普

    作者:小枣君 来源:鲜枣课堂 云计算介绍 2006年8月9日,当时的谷歌首席执行官埃里克·施密特(Eric Schmidt)在搜索引擎大会(SES San Jose 2006)上,首次提出了" ...

  8. 和cnn结合_写给小白的R-CNN介绍

    在上一篇写给小白的YOLO介绍中,我介绍了目标检测的任务类型和YOLO的基本方法. 实际上,R-CNN是比YOLO更早的方法,但是因为它对后面的许多目标检测方法都有指导意义,所以我们还是介绍一下. 下 ...

  9. 【小白必读】机器学习入门须知

    一.机器学习入门浅谈 机器学习领域,又或者更大而化之的说人工智能方向,因为"阿尔法狗"等一系列的热门爆点话题,被推到了人前,受到越来越多人的关注. 无论你是什么领域的工作者,都一定 ...

最新文章

  1. mysql数字转换中文版_MYSQL字符数字转换
  2. 对Bridge模式的理解
  3. 记-php连接mssql遇上的问题
  4. 下载Nacos源码并运行
  5. 04 能够使用using和namespace引用和定义命名空间 1214
  6. 如何修改mysql物理文件存放地址_如何防封号物理地址和网络地址修改攻略
  7. 信号量与线程互斥锁的区别
  8. C# 父类代码动态转换子类
  9. JWT的API鉴权,基于拦截器的token与鉴权
  10. 六十八个超级经典小故事
  11. 五种无线通信协议及其特点
  12. ERwin Data Modeler数据库建模工具使用纪要
  13. python pySerial模块介绍
  14. 大气压随温度变化表_【请求提供地球大气的气压和温度随高度变化的数据,最好提供曲线图.】作业帮...
  15. firefox android 去更新,Firefox Android移动版更新
  16. Linux内核虚拟摄像头,Qt Opencv 在Linux下摄像头简单示例v1.0
  17. 计算机职称证的用途,计算机软考高项过了有什么用处
  18. 【Vue项目实战】Vue3动画神操作!教你如何实现PPT一样的动画效果!
  19. 知乎回答一键导出为PDF——Python实现
  20. Cadence Allegro导出BOM清单图文教程及视频演示

热门文章

  1. 【青少年编程】【四级】创意画图
  2. 【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
  3. Python 可视化近 90 天的百度搜索指数 + 词云图
  4. 谷歌 AI 编舞师,连张艺兴最喜欢的 Krump 都不在话下
  5. WAIC剪影:AI的未来,关乎星辰大海
  6. 无限想象空间,用Python玩转3D人体姿态估计
  7. Go对Python产生的冲击
  8. 韬光养晦的Sony AI,凭什么与Google和Facebook平起平坐?
  9. 怎样搞定分类表格数据?有人用TF2.0构建了一套神经网络 | 技术头条
  10. 大数据时代,谁的眼神锁定你?