[译] 深度学习系列1:设置 AWS & 图像识别

简介: 本文讲的是[译] 深度学习系列1:设置 AWS & 图像识别,这篇文章是深度学习系列的第一部分。你可以在这里查看第二部分,以及这里查看第三部分。
本文讲的是[译] 深度学习系列1:设置 AWS & 图像识别,

这篇文章是深度学习系列的第一部分。你可以在这里查看第二部分,以及这里查看第三部分。

本周的任务:对猫和狗的图像进行分类

欢迎阅读本系列第一篇关于实战深度学习的文章。在本文中,我将创建 Amazon Web Services(AWS)实例,并使用预先训练的模型对猫和狗的图像进行分类。

在这个完整的系列里,我会记录下我在 Fast AI 深度学习课程的第一部分内容的进度。这门课程最初是由旧金山大学数据研究所提供的,并且现在能够在 MOOC 上观看。最近,这门课的作者提供了第二部分的内容,并且在接下来的几个月都可以在网上观看。我上这门课的主要是因为我对深度学习有着强烈的兴趣。我在网上发现了许多关于机器学习的课程,但有关深度学习的实战课程还是比较少见的。深度学习似乎因为进入门槛略高一点,而被单独列出。开始深度学习之前我们首先需要一个 GPU,在这门课程里我们会使用 AWS 的 p2 实例。现在让我们一起来准备它。

这门课程第一周,我们会把重点放在准备工作上。正确地准备深度学习需要一点时间,但这对一切能正确运行很重要。这包括了设置 AWS,创建和配置 GPU 实例,设置 ssh 连接服务器以及管理你的目录。

我在实习期用的笔记本电脑上遇到了一些权限问题。我有个建议能够避免这个问题,从而帮你节省大量时间:在尝试操作之前,确保你在你的笔记本电脑上拥有完整的管理员权限。一些热情的工程师提出帮助我设置 GPU 实例,但是他们不能马上帮我搞定,所以我决定自己来。

用来设置 AWS 的脚本是用 bash 写的,如果你用的是 Windows 操作系统,那么你需要一个能够处理它的程序,我用的是 Cygwin。我想分享一些在设置过程中我遇到的问题(以及对应的解决方案)。如果你没有在上 Fast AI 课程,你可以跳过这部分继续阅读。我在设置过程中所遇到的问题有:

  • bash 脚本报错

    我看过一些可能的原因,但是没有一个是对我有用的解决方案。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 课程中的进度。到时候那里见!





原文发布时间为:2017年8月07日

本文来自云栖社区合作伙伴掘金,了解相关信息可以关注掘金网站。
相关实践学习
基于函数计算实现AI推理
本场景基于函数计算建立一个TensorFlow Serverless AI推理平台。
目录
相关文章
|
3天前
|
机器学习/深度学习 存储 边缘计算
深度学习在图像识别中的应用与挑战
【4月更文挑战第23天】 随着人工智能技术的飞速发展,深度学习作为其重要分支之一,在图像识别领域取得了显著的成果。本文将探讨深度学习在图像识别中的应用,分析其优势和面临的挑战,并展望未来的发展趋势。
|
1天前
|
机器学习/深度学习 运维 监控
深度学习在图像识别中的应用与挑战
【4月更文挑战第25天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉领域进步的核心动力。本文旨在探讨深度学习技术在图像识别任务中的创新应用及其面临的主要挑战。我们将首先回顾深度学习的基本原理和关键技术,随后通过实际案例分析其在图像分类、目标检测及语义分割等方面的应用效果。最后,文中将讨论当前技术瓶颈,如数据不平衡、模型泛化能力以及计算资源限制等,并提出可能的解决方案。
|
1天前
|
机器学习/深度学习 自动驾驶 算法
探索基于深度学习的图像识别在自动驾驶中的应用
【4月更文挑战第25天】 随着人工智能技术的飞速发展,深度学习已成为推动自动驾驶领域革新的核心力量。本文旨在深入探讨深度学习技术在图像识别领域的最新进展及其在自动驾驶系统中的实际应用。通过分析卷积神经网络(CNN)和递归神经网络(RNN)等先进算法,我们揭示了如何有效提升自动驾驶汽车在复杂环境中的视觉感知能力。文中还将讨论深度学习模型在处理实时数据时所面临的挑战,以及为解决这些挑战而采取的创新方法。
|
2天前
|
机器学习/深度学习 安全 计算机视觉
深度学习在图像识别中的应用与挑战
【4月更文挑战第24天】 随着计算机视觉技术的飞速发展,深度学习已成为推动图像识别领域进步的核心动力。本文旨在探讨深度学习技术在图像识别中的关键应用,并分析当前面临的主要挑战。通过回顾卷积神经网络(CNN)的基础架构及其在图像分类、目标检测和语义分割中的创新应用,文章揭示了深度学习模型如何优化视觉信息处理流程。同时,针对训练数据需求、计算资源限制、模型泛化能力及对抗性攻击等问题,本文提出了一系列解决策略和技术方向,为未来研究提供了参考框架。
6 0
|
2天前
|
机器学习/深度学习 传感器 自动驾驶
基于深度学习的图像识别技术在自动驾驶系统中的应用
【4月更文挑战第24天】 随着人工智能技术的飞速发展,深度学习在图像处理领域取得了显著成果,特别是在自动驾驶系统中的应用。本文首先介绍了深度学习的基本概念和关键技术,然后详细阐述了卷积神经网络(CNN)在图像识别中的优势和应用,最后探讨了深度学习在自动驾驶系统中的挑战和未来发展趋势。
|
2天前
|
机器学习/深度学习 数据采集 自动驾驶
深度学习在图像识别中的应用与挑战
【4月更文挑战第24天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉领域进步的核心动力。本文旨在探讨深度学习在图像识别任务中的关键技术、应用实例以及面临的主要挑战。我们将从卷积神经网络(CNN)的基本原理出发,剖析其在图像分类、目标检测和语义分割等方面的具体应用,并讨论数据增强、模型泛化及对抗性攻击等现实问题对深度学习模型性能的影响。通过综合分析和案例研究,本文为读者提供了一个关于深度学习在图像识别领域应用现状和未来趋势的全面视角。
|
2天前
|
机器学习/深度学习 算法 自动驾驶
深度学习在图像识别中的应用与挑战
【4月更文挑战第24天】 随着人工智能技术的飞速发展,深度学习已成为推动计算机视觉进步的重要力量。本文将深入探讨深度学习技术在图像识别领域的应用现状,分析其面临的主要挑战,并提出未来可能的发展方向。我们将从卷积神经网络(CNN)的基础结构出发,逐步剖析其在图像分类、目标检测及语义分割等任务中的实际应用,并讨论数据增强、迁移学习等优化策略。此外,文章还将针对计算资源需求高、模型泛化能力以及对抗性攻击等问题进行详细论述。
|
3天前
|
机器学习/深度学习 边缘计算 监控
深度学习赋能智能监控:图像识别技术的革新与应用
【4月更文挑战第23天】 随着人工智能的迅猛发展,深度学习技术在图像处理领域取得突破性进展,特别是在智能监控系统中,基于深度学习的图像识别已成为提升系统智能化水平的核心动力。本文旨在探讨深度学习如何优化智能监控系统中的图像识别过程,提高监控效率和准确性,并分析其在不同应用场景下的具体实施策略。通过深入剖析关键技术、挑战及解决方案,本文为读者提供了一个关于深度学习图像识别技术在智能监控领域应用的全面视角。
|
3天前
|
机器学习/深度学习 监控 安全
智能监控的革新者:基于深度学习的图像识别技术
【4月更文挑战第23天】 在智能监控领域,基于深度学习的图像识别技术已经成为一种革命性的工具。这种技术能够自动识别和分类图像中的对象,提供实时的、准确的信息,从而提高监控系统的效率和准确性。本文将探讨深度学习在图像识别中的应用,以及其在智能监控中的潜在价值。
|
3天前
|
机器学习/深度学习 运维 监控
深度学习在智能监控领域的革新:图像识别技术的崛起
【4月更文挑战第23天】 随着人工智能技术的飞速发展,深度学习已经成为推动计算机视觉进步的核心技术之一。特别是在智能监控领域,基于深度学习的图像识别技术正逐渐改变着安全监控的传统模式,提升系统的智能化水平。本文将探讨基于深度学习的图像识别技术在智能监控系统中的应用现状与挑战,分析其在目标检测、行为分析以及异常事件识别中的作用,并展望其未来发展趋势。

热门文章

最新文章