- 原文地址:Deep Learning #1: Setting up AWS & Image Recognition
- 原文做者:Rutger Ruizendaal
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:TobiasLee
- 校对者:Tina92 sqrthree
这篇文章是深度学习系列的第一部分。你能够在这里查看第二部分,以及这里查看第三部分。前端
本周的任务:对猫和狗的图像进行分类python
欢迎阅读本系列第一篇关于实战深度学习的文章。在本文中,我将建立 Amazon Web Services(AWS)实例,并使用预先训练的模型对猫和狗的图像进行分类。react
在这个完整的系列里,我会记录下我在 Fast AI 深度学习课程的第一部份内容的进度。这门课程最初是由旧金山大学数据研究所提供的,而且如今可以在 MOOC 上观看。最近,这门课的做者提供了第二部分的内容,而且在接下来的几个月均可以在网上观看。我上这门课的主要是由于我对深度学习有着强烈的兴趣。我在网上发现了许多关于机器学习的课程,但有关深度学习的实战课程仍是比较少见的。深度学习彷佛由于进入门槛略高一点,而被单独列出。开始深度学习以前咱们首先须要一个 GPU,在这门课程里咱们会使用 AWS 的 p2 实例。如今让咱们一块儿来准备它。linux
这门课程第一周,咱们会把重点放在准备工做上。正确地准备深度学习须要一点时间,但这对一切能正确运行很重要。这包括了设置 AWS,建立和配置 GPU 实例,设置 ssh 链接服务器以及管理你的目录。android
我在实习期用的笔记本电脑上遇到了一些权限问题。我有个建议可以避免这个问题,从而帮你节省大量时间:在尝试操做以前,确保你在你的笔记本电脑上拥有完整的管理员权限。一些热情的工程师提出帮助我设置 GPU 实例,可是他们不能立刻帮我搞定,因此我决定本身来。ios
用来设置 AWS 的脚本是用 bash 写的,若是你用的是 Windows 操做系统,那么你须要一个可以处理它的程序,我用的是 Cygwin。我想分享一些在设置过程当中我遇到的问题(以及对应的解决方案)。若是你没有在上 Fast AI 课程,你能够跳过这部分继续阅读。我在设置过程当中所遇到的问题有:git
bash 脚本报错github
我看过一些可能的缘由,可是没有一个是对我有用的解决方案。Github 上这个课程的设置脚本有两个:setup_p2.sh 和 setup_instance.sh。若是上面那两个脚本不能用,你能够用这个脚本试试。但若是这个脚本仍是不行,请务必再尝试使用原始版本的脚本。算法
我在 aws-alias.sh 这个脚本上也遇到了一样的问题,在第七行的末尾加上 '
可以解决这个问题。下面是修改前和修改后的第七行:后端
alias aws-state='aws ec2 describe-instances --instance-ids $instanceId --query "Reservations[0].Instances[0].State.Name"
alias aws-state='aws ec2 describe-instances --instance-ids $instanceId --query "Reservations[0].Instances[0].State.Name"'
这里有一个为不熟悉 Bash 的人准备的 Bash 备忘录,由于你须要经过 Bash 来和你的实例进行交互,因此我很是推荐你去看看。
Anaconda 的安装。视频中提到你须要在安装 Cygwin 以前先安装 Anaconda。你可能感到有些疑惑,由于你须要用“Cygwin python”来运行 pip 命令而不是一个本地的 Anaconda 分发版。
另外,这个仓库有一个手把手的教程教你如何让你的实例运行起来。
解决了一些问题以后我总算让个人 GPU 实例运行起来了。是时候开始深度学习了!一个简短的免责声明:在这一系列博客中,我不会重复已经在课程笔记中列出的内容,由于不必。我会强调一些我以为颇有趣的事情,以及我在课程中遇到的问题和一些想法。
让咱们从第一个可能已经在你脑海中的问题开始:什么是深度学习?它如今为何被炒得这么火?
深度学习只是一个有着多个隐含层的人造神经网络,隐含层让它变得“深度”。通常的神经网络只有一层或者两层的隐含层,而一个深度神经网络有更多的隐含层。它们也具备与通常神经网络中的“简单”层不一样类型的层。
(浅) 神经网络
目前,深度学习在一些著名的数据集上不断地有着出色的表现,因此深度学习也经历了很多的炒做。深度学习的流行有三个缘由:
神经网络是经过模仿人脑而设计的。根据通用近似定理,它理论上能拟合任何函数。神经网络经过反向传播算法来训练,这使得咱们可以调整模型的参数来适应不一样的函数。最后一个缘由,也是深度学习近期取得众多成就的主要缘由。由于游戏行业的进步和 GPU 计算能力的强劲发展,如今咱们以很是快速和可扩展的方式来训练深层的神经网络。
在第一节课里,咱们的目标是使用一个叫作 Vgg16 的预先训练好的模型,来对猫和狗的图片进行分类。Vgg16 是 2014 年赢得 Imagenet 比赛模型的一个轻量级版本。这是一个年度的比赛而且多是计算机视觉方面最大的一个比赛。咱们能够利用这预先训练好的模型,而且把它应用到咱们的猫和狗的图片数据集上。咱们的数据集已经被课程的做者编辑过了,以确保它的格式正确。原始的数据集能够在 Kaggle 上找到。这场比赛最初是在 2013 年进行的,那时的准确率是 80%。而咱们的简单模型已经可以达到 97%的准确度。大脑如今还清醒吧?下面是一些照片和他们被预测的标记:
狗狗们和猫猫们被预测的标记
咱们用叫作独热编码的方法来处理目标标记,这是分类问题中经常使用的方法。[1. 0.] 说明图片中是一只猫, [0. 1.] 则说明是一只狗。咱们没有用一个叫作“目标”的有 0 和 1 两种取值的变量,而是建立了一个包含两个值的数组。你能够把这些变量当作“猫猫”和“狗狗”。若是变量为正,那么它就会被标记为 1,不然就是 0。在一个多分类问题中,这意味着你的输出向量可能长成这样:[0 0 0 0 0 0 0 1 0 0 0]。在这个例子中,Vgg16 模型会输出图片属于“猫”这个类别的可能性以及属于“狗”这个类别的可能性。接下来的一个挑战是调整这个模型,以便咱们将其应用于另外一个数据集。
本质上这个数据集和先前的是同一个数据集,可是没有被课程做者预处理过。Kaggle 命令行接口(CLI)提供了一个快捷的方法来下载这个数据集,能够经过 pip 来安装。一个美圆标志一般用来表示命令运行在终端中。
$ pip install kaggle-cli复制代码
训练数据集中有 25000 张已经被标记为猫或是的狗的图片,测试数据集中则包含 12500 张未被标记的图片。为了调整参数,咱们还经过占用训练集的一小部分来建立验证数据集。设置一个完整数据集的“样本”也颇有用,能够用来快速检查你的模型在构建过程当中是否正常工做。
咱们使用 Keras 库来运行咱们的模型,这个库是基于 Thenao 和 TensorFlow 的最流行的深度学习库之一。Keras 可以让你更加直观地来编写神经网络,这意味着你可以更多地关注神经网络的架构而不用担忧 TensorFlow API。由于Keras 经过查看图片所属的目录来肯定它的类别,因此把图片移动到正确的目录很是的重要。这些操做所需的 bash 命令能够直接在 Jupyter Notebook 中运行,也就是咱们写代码的地方。这个连接包含了额外的一些关于这些命令的信息。
一个 epoch,也就是在数据集完整地跑一遍,在个人 Amazon p2 实例上花费了 10 分钟时间。在这个例子里数据集是包含 23000 张图片的训练数据集,另外的 2000 张图片被保留下来做为验证数据集。在这里我决定使用 3 个 epoch。在验证数据集上的准确度在 98% 左右。训练好模型以后,咱们能够看一些被正确分类的图片。在这个例子里,咱们用图片中是一只猫的几率做为结果。1.0 表示模型很是自信地认为图片中是一只猫,而 0.0 则表示图片中是一只狗。
被正确分类的图片
如今让咱们来看一些被错误分类的图片。正如咱们所见,这些图片大部分是从远处拍摄的,而且图片里有多种动物。原始的 Vgg 模型是用在图片中只有一种清晰可见目标类别中的。只有我以为第四张图片有点可怕吗?
被错误分类的图片
最后,这些是模型对其类别最不肯定的一些图片。这意味着几率很是接近 0.5(1 表明是一只猫而 0 表明是一只狗)。第四张图片中的猫只有一张脸露出来。第一张和第三张图片是长方形的而不是原模型训练集中的正方形。
模型最不肯定的图片
这就是这周的内容。就我我的而言,我已经火烧眉毛地想要开始第二周的课程而且学习更多关于这个模型的内部细节。但愿咱们也能开始利用 Keras 从头构建一个模型。
同时,感谢全部更新 GitHub 脚本的人,这可帮了大忙!另外也要感谢全部参与 Fast AI 论坛的人,大家太棒了。
若是你喜欢这篇文章,请把它推荐给你的朋友们,让更多人的看到它。你也能够按照这篇文章,跟上我在 Fast AI 课程中的进度。到时候那里见!
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、React、前端、后端、产品、设计 等领域,想要查看更多优质译文请持续关注 掘金翻译计划。