如何构建深度学习神经网络?使用 Python 对 12,500 张猫狗图像进行准确分类
深度学习是目前人工智能领域最令人兴奋的话题之一。它是根据生物学概念开发的,现在是算法的集合。
事实证明深度学习在计算机视觉、自然语言处理、语音识别等很多领域都可以取得非常好的效果。
在过去的6年里,深度学习已经在很多领域得到应用,最近也有很多与深度学习相关的技术突破。
这里只是几个例子:特斯拉的自动驾驶汽车、Facebook的照片注释系统、Siri或Cortana等虚拟助手、聊天机器人、能够识别物体的相机,这些技术突破都归功于深度学习。
语言理解、图像分析等认知任务的深度学习表现在很多方面已经达到了我们人类的水平。
如何构建一个在图像分类任务中能够达到90%准确率的深度神经网络?
这个问题看似非常简单,但在深度神经网络,尤其是卷积神经网络(CNN)出现之前,这是计算机科学家研究多年的一个微妙问题。
本文分为三个部分:
- 介绍数据集和用例,并解释此图像分类任务的复杂性。
- 深度学习的专用环境。 此环境构建在基于AWS GPU的EC2服务上。
- 训练两个深度学习模型:第一个模型是使用 Keras 和 TensorFlow 从头开始的端到端过程,另一个模型使用在大型数据集上预训练的神经网络。
许多图像数据集专门用于比较深度学习模型。本文使用的数据集来自 Cat vs Dogs Kaggle 竞赛,该数据集包含大量的狗和猫的标记图像。
和所有Kaggle比赛一样,这个数据集包含两个文件夹:
- Training文件夹:包含25,000张猫和狗的图片,每张图片都有一个标签,这部分文件就是标签。姓名。我们将使用此文件夹来训练和评估我们的模型。
- 测试文件夹:包含12500张图片,每张图片均以编号命名。对于该数据集中的每个图像,我们的模型都会预测该图像是狗还是猫(1 = 狗,0 = 猫)。事实上,Kaggle 也使用这些数据对模型进行评分,然后在排行榜中对模型进行排名。
让我们观察一下这些图像的特征。这些图像各不相同并且具有不同的分辨率。图片中显示的猫和狗的形状、位置和身体颜色都不同。
他们的姿势不一样,有的坐着,有的不坐,心情可喜可悲,猫在睡觉,狗在吠。可以从任何角度、任何焦距拍摄照片。
这些图片有无限的可能性。对于我们人类来说,很容易识别不同类型照片中场景中的宠物。然而,这不是一项机械任务。小东西。
而且,如果我们想让机器实现自动分类,我们需要知道如何有力地表示猫和狗的特征,也就是为什么我们认为这张图片中的图片是猫而那张图片不是一只狗。这需要代表每种动物的内部特征。
深度神经网络在图像分类任务中表现出色,因为它们可以自动学习多层抽象,从而为每个分类任务提供更简单的结果。特征表示。
深度神经网络能够识别极端变化的模式,并且对于经过扭曲和简单几何变换的图像非常鲁棒。 让我们看看深度神经网络如何处理这个问题。 配置深度学习环境
深度学习的计算量非常大。如果你在计算机上运行深度学习模型,你就能深刻地理解这一点。
但是如果我们使用GPU,训练速度将会大大加快,因为GPU在处理矩阵乘法这样的并行计算任务时非常高效,而神经网络几乎充满了矩阵乘法运算,所以计算能力将是惊人的。令人难以置信的进步。
我自己的计算机上没有强大的 GPU,因此我决定使用 Amazon Web Services (AWS) 中名为 p2.xlarge 的虚拟机,它是 Amazon EC2 的一部分。
虚拟机配置包括具有 12 GB 显存、61 GB RAM、4 个 vCPU 和 2496 个 CUDA 核心的 NVIDIA GPU。
您可以看到这是一个强大的野兽,最棒的是我们每小时只需 0.90 美元即可使用它。当然,您可以选择其他配置更好的虚拟机,但对于我们现在处理的任务,p2.xlarge 虚拟机已经绰绰有余。
我的虚拟机在 Deep Learning AMI CUDA 8 Ubuntu 版本上运行。现在让我们更好地了解这个系统。
该系统基于Ubuntu 16.04服务器。打包了所有需要的深度学习框架(TensorFlow、Theano、Caffe、Keras)并安装了GPU驱动(听说自己安装驱动是一场噩梦般的经历)。
如果您是 AWS 新手,请阅读以下两篇文章:
- https://blog.keras.io/running-jupyter-notebooks-on-gpu-on-aws-a-starter-guide .html
- https://hackernoon.com/keras-with-gpu-on-amazon-ec2-a-step-by-step-instruction-4f90364e49ac
这两篇文章将向您介绍这两个内容单击下一步:
- EC2 虚拟机创建和连接。
- 配置网络以远程访问 Jupyter 笔记本。
配置好环境后,我们开始构建一个能够对猫和狗图像进行分类的卷积神经网络,并使用TensorFlow和Keras深度学习框架。
首先介绍一下 Keras:Keras 是一个用纯 Python 编写的、基于 Tensorflow、Theano 和 CNTK 后端的高级神经网络 API。 Keras 为支持快速实验而生,能够快速将你的想法转化为结果。 。 从头开始构建卷积神经网络。
在训练和测试集上绘制了损失和准确率指标,这使我们能够更直观地评估训练过程中模型的改进情况。
数据准备
在开始之前,首先从 Kaggle 下载并解压训练数据集。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。