看你是人还是物,是猫还是狗。 卷积神经网络(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:///blog/intro-to-cnns-part-1/ https:///blog/softmax/ — 完 — 本文系网易新闻·网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。 人类未来20年最重要的航天任务——登陆火星,已经启动!这场征服星辰大海的征程,将彻底改变我们的未来。 什么是火星探索,为什么要远征未来,如何培养科学探索的精神? 中国空间探测技术首席科学传播专家庞之浩,最新推出讲给孩子的火星课《登陆火星》,在其中深入浅出地讲解火星探索史+航天知识,回答了你还不知道的种种好奇疑问。 现在这一精心打磨的课程正在超值预售中,定价99元,目前限时半价,仅49元。让孩子爱上探索宇宙,培养科学思维,现在就开始吧~ 限时半价中👇 量子位 QbitAI · 头条号签约作者 վ'ᴗ' ի 追踪AI技术和产品新动态 喜欢就点「在看」吧 ! |
|