专栏首页AI研习社教你用Keras做图像识别!只会图像检测并不强力

教你用Keras做图像识别!只会图像检测并不强力

AI 研习社按:今天为大家带来硅谷深度学习网红 Siraj 的一则教学视频:如何从零开始构建一个图像分类器来对猫和狗进行分类。(内心OS:终于要开始图像部分了!)具体视频内容如下,Github 链接详见文末“阅读原文”。 为了照顾没有 WiFi 的小伙伴,我们特别提供了以下根据视频内容整理的文字版(hin 贴心有木有!):

图像分类发展历史

在80年代和90年代初出现了一些不同的尝试,都用了类似的方法——根据图片的构成特征来给每张图片手动编码进行分类,但变量实在太多了——世界上没有相同的两片叶子。所以结果往往错的很离谱,因此图像分类被视为只有人类才能胜任的工作。

但1998年,一个叫Yann Lecun的研究者介绍了一个称为卷积神经网络(CNN)的模型,字符分类的正确率达到了99% ,打破了各项纪录。

2012年,一个叫Alex Krizhevsky的研究,用CNN参加了一年一度的ImageNet竞赛——这是计算机视觉领域的年度奥运——它对几千张图片的分类正确率达到了85%,创造了新记录。此后谷歌把CNN用于搜索中的图片识别,Facebook则把它用于自动标注,这些功能现在都很火。

构建图像分类器

Step 1:收集数据

首先要从kaggle下载一个图像数据集,包括猫狗在内的1024张图片,每张都在自己的文件夹里,然后用Keras深度学习库进行演示——Keras是在TensorFlow之上的高级包装类,因为可以给每个层定义一个自己的代码行,使模型构建变得更加直观。

Step 2:建立模型

首先,要初始化训练数据和验证数据的变量,然后就可以构建模型了。要利用时序函数初始化这类模型,这个模型可以构造一个线性堆叠层,所以将每个层视为将数据馈送到下一个层的对象。另一类是图模型,它允许多个独立的输入和输出。

接下来添加第一层——卷积层。CNN的第一层总是卷积层,输入值是32×32×3像素数组。3指的是RGB值。该数组中的数值都为0到255,描述的是像素强度(灰度值),它是给出像素数组作为输入CNN就能给出它是某一类别的概率。可以把卷积层想象成一个手电筒,照在图像的左上方。手电筒滑过输入图像的所有区域。手电筒是我们的过滤器,其照射的区域是感受野(Receptive field)

过滤器也是数组。这些数字是某一特定层的权值。可以把过滤器当作一个特征识别器。当过滤器滑动或对输入进行卷积时,它的值与图像中的像素值相乘,这些被称为元素乘法。然后对每个区域的乘积求和。在覆盖图像的所有部分之后得到特征映射。

由于权值是随机初始化的,过滤器不能一开始就检测到具体特征,但在训练期间 CNN能让过滤器学习一些值。所以第一个过滤器会学习检测一些低级的特征,如曲线。因此,如果将过滤器放置在含有曲线的图像的一部分上,乘积和求和的结果值会相当大;但如果我们将其放在图像中没有曲线的部分,结果值则为零。这就是过滤器检测特征的方法

接下来我们将通过ReLU(修正线性单元)激活层来传递此特征映射。ReLu也是一个非线性的操作,可以将特征映射中的所有负像素值用零代替。也可以用其他函数,但大多数情况下ReLu往往表现更好。

激活层增加了模型的非线性特征,这意味着神经网络能够学习比线性回归更复杂的函数。之后我们将初始化最大池化层。池化降低了每个特征映射的维数,但保留最重要的信息,这就降低了网络计算的复杂程度。

池化也有不同的方式,在这个例子中我们用的是最大值(Max)的方式。在我们画圈的窗口内,从修正的特征映射中挑出最大元素值,并且在该特征映射的每个区域上滑动此窗口挑出最大值。

所以一个经典的CNN架构看起来就像这样:三个卷积块后面跟着一个全连接层。已经初始化了前三层,这个过程基本上只能再重复两次。输出的特征映射就被馈送到下一个卷积层,而这一层的过滤器将会学习检测更多的抽象特征,如爪子和脚印。

我们将使用Dropout来防止过拟合。当训练过拟合时模型便无法预测新数据的标签,Dropout层可以drop out一组随机的激活函数,当数据传递至激活函数时将其置零。

为了准备数据的dropout,我们先将特征映射降成为一维,然后用密度函数初始化全连接层,并对该层应用修正线性单元(ReLu)。Dropout后再初始化一个全连接层,然后它会输出一个n维向量,n指的是类的数量,所以n是2,并且把n维向量用sigmoid函数变换一下,它就把数据变成了每个类的概率。

那么网络是怎么学习的呢?损失函数衡量的是目标输出与期望输出的差异。想要最小化损失函数,,要算出损失函数关于每一层权值的导数,计算出我们想要的网络更新的方向,将反向一层一层地传播损失,然后更新每个过滤器的权值,这样它们就能按照最小化损失函数的梯度方向进行修改。

使用编译方法来计算学习过程。这里把损失函数定义为二进制交叉熵,通常都用它定义二进制分类问题的损失函数,优化器是rmsprop——它是做梯度下降,因为这是一个分类问题,度量指标设置为accuracy。

Step 3:训练模型

最后写出拟合函数来训练模型,给出训练参数和验证数据以及每个样本的运行次数,然后保存权值,就可以在后面用我们训练过的模型了。

总体的准确率约为70%,和人的注意力差不多。如果给模型一张新的狗或猫的图片,它就差不多能正确预测。

预测改进的两个方法

  • 可以用更多的图片
  • 用自己的网络来扩充现有的预训练网络,即迁移学习(transfer learning)。

总结本节课重点如下:

  • 卷积神经网络受到人类视觉皮层的启发,并且能实现最先进的图像分类;
  • CNN在每个卷积层上通过学习得到的过滤器,可以检测到越来越抽象的特征;
  • 可以用Keras和TensorFlow轻而易举地建造模型。

本文分享自微信公众号 - AI研习社(okweiwu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 曹旭东7000字剖析:无人驾驶端到端的学习(end-to-end learning)靠谱吗?

    前天,雷锋网撰文《爆料:曹旭东创立自动驾驶公司Momenta 首次公开项目细节》,正式公布曹旭东及其创业项目Momenta,此项目致力于打造自动驾驶大脑,核心技...

    AI科技评论
  • 业界丨百度李彦宏:人工智能改变医疗的四个层次

    在昨天的乌镇第三届互联网大会上,百度CEO李彦宏称,“移动互联网的时代已经结束了……互联网的下一幕将是人工智能”,并表示,未来的每一个行业,都会因人工智能的到来...

    AI科技评论
  • 前沿丨AI 能看懂漫画吗?它的脑补能力比人类差远了

    读漫画对人工智能太难了 随着人工智能的不断发展,它似乎已经在很多方面赶超了人类——面部识别、物体识别,还有象棋、围棋、各种视频游戏。 人们不禁要问,还有什么事是...

    AI科技评论
  • 学界 | AI 黑箱难题怎么破?基于神经网络模型的算法使机器学习透明化

    编者按:人们可以训练人工智能 (AI)和机器人完成任务,但整个过程在黑箱中运作。我们并不知道 AI 和机器人是如何决策的。一家名为 OptimizingMind...

    AI科技评论
  • IBM中国研究院院长沈晓卫:从编程时代迈向认知时代,没有一家企业能独担此任

    编者按: 11 月 23 日,科大讯飞年度发布会在京举行, IBM 中国研究院院长沈晓卫在会上作为合作伙伴发表了演讲,表示人类已经从传统的“编程时代”迈向“认知...

    AI科技评论
  • 深度丨AI 从业者该如何选择深度学习开源框架(6000字长文)

    编者按:本文内容来自微软美国总部机器学习科学家彭河森博士在雷锋网硬创公开课的分享。 正如程序语言一样,深度学习开源框架同样各有优劣和适用的场景,那么 AI 从业...

    AI科技评论
  • 周刊|MXNet爆红,大神Yann LeCun和吴恩达最新演讲

    美国时间 11 月 22 日,亚马逊 CTO Werner Vogels 在博文中写到 MXNet 被 AWS 正式选择成为其云计算的官方深度学习平台。 MXN...

    AI科技评论
  • 旷视科技首席科学家孙剑:登上“人工智能之月”,我们爬树还是造火箭?

    雷锋网按:本文根据孙剑博士在微软亚洲研究院召开的“让世界充满 AI-人工智能研讨会”上所做的报告《通向视觉智能之路》 编辑整理而来,在未改变原意的基础上略有删减...

    AI科技评论
  • 深度丨女主播的“逆天”美颜原来是靠这些 AI 技术实现的

    雷锋网按:本文内容来自涂图 CTO 邱彦林在硬创公开课的分享,在未改变原意的基础上进行了编辑整理。 几年前图片美颜教育了市场,到了直播时代,美颜同样成为直播平台...

    AI科技评论
  • 科大讯飞创始人刘庆峰:17年AI从业经验,从这10000字长文中一窥

    编者按:2016 年 11 月 23 日,科大讯飞在京举行了 2017年度发布会,董事长兼创始人刘庆峰在现场做了主题演讲,总结了人工智能的过去和未来,并详细讲述...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券