MATLAB 深度学习简介
什么是深度学习?
深度学习是一种机器学习方法。在深度学习中,模型直接从图像、文本或声音学习以执行分类任务。深度学习通常是使用神经网络架构来实现的。“深度”一词是指网络中的层数。换而言之,层数越多,网络就越深。传统的神经网络只包含两到三层,而深度网络可能包含数百层。
深度学习应用实例
深度学习特别适用于识别应用,比如人脸识别、文本翻译、语音识别,以及高级驾驶辅助系统,包括车道分类和交通标志识别。
- 自动驾驶车辆在接近人行横道时会减速慢行。
- ATM 拒收假钞。
- 智能手机 App 可以即时翻译国外街道标志。
什么让深度学习成为可能
三大技术进步使得深度学习更易于实现。播放以下幻灯片来了解它们。
深度神经网络简介
深度神经网络受到生物神经系统的启发,将多个非线性处理层结合起来,使用简单元素并行处理任务。它由一个输入层、若干隐藏层和一个输出层组成。这些层通过节点或神经元相连,每个隐藏层都会使用上一层的输出作为其输入。
深度神经网络如何学习
假设我们有一组图像,其中每个图像包含四种不同类别的对象之一。我们希望深度学习网络自动识别每个图像中的对象。我们对图像进行标注,以便为网络提供训练数据。
使用这些训练数据,网络就能开始理解对象的具体特征,并将这些特征与对应的类别关联起来。
网络中的每一层都会从上一层获取数据,并对其进行变换,然后继续将该数据传递到下一层。网络会逐层增加所学内容的复杂度和细节。
请注意,网络直接从数据中学习,因此,我们对学习到的特征不会产生任何影响。
了解有关深度学习基础知识的更多信息
深度神经网络受到生物神经系统的启发,将多个非线性处理层结合起来,使用简单元素并行处理任务。它由一个输入层、若干隐藏层和一个输出层组成。这些层通过节点或神经元相连,每个隐藏层都会使用上一层的输出作为其输入。
卷积神经网络(简称 CNN 或 ConvNet)是最常见的深度学习算法之一。像其他神经网络一样,CNN 由一个输入层、一个输出层和中间的多个隐藏层组成。
特征检测层
这些层对数据执行三种类型的操作之一:卷积、池化或修正线性单元 (ReLU)。
卷积层将一组卷积滤波器应用于输入图像,每个滤波器用于激活图像中的特定特征。
池化层执行非线性下采样,以减少网络需要学习的参数个数,从而简化输出。
修正线性单元 (ReLU) 层将负值映射到零,同时保持正值不变,从而让训练更快速、更高效。
这三个操作在几十层乃至数百层上反复进行,每一层都学习检测不同的特征。
分类层
在特征检测后,CNN 的架构转向分类。
倒数第二层是全连接层 (FC)。该层输出一个 K 维向量,其中 K 是网络能够预测的类的数量。此向量包含任何图像被归为各个类别的概率。
CNN 架构的最后一层使用 softmax 函数来提供分类输出。
如果您还不熟悉深度学习,则便捷的入门方法是使用现有网络,比如 GoogLeNet,这是基于一百多万张图像训练的卷积神经网络 (CNN)。GoogLeNet 最常用于图像分类。它可以将图像分为 1,000 个不同类别,包括键盘、计算机鼠标、铅笔和其他办公设备,以及各个品种的狗、猫、马和其他动物。
您可以使用 GoogLeNet 对任一图像中的对象进行分类。在本例中,我们使用该网络对台式机上安装的网络摄像头捕获的图像中的对象分类。除了 MATLAB®,我们还将使用以下工具:
- Deep Learning Toolbox™
- 在 MATLAB 中使用网络摄像头的支持包
- 使用 GoogLeNet 的支持包
加载 GoogLeNet 后,我们会连接到网络摄像头并捕获实时图像。
camera = webcam; % 连接到摄像头 nnet = googlenet; % 加载神经网络 picture = camera.snapshot; % 拍照
接下来,我们将图像的大小调整为 224×224 像素,这是 GoogLeNet 所需的大小。
picture = imresize(picture,[224,224]); % 调整图片的大小
现在,GoogLeNet 便可对我们的图像进行分类了。
label = classify(nnet, picture); % 对图片分类 image(picture); % 显示图片 title(char(label)); % 显示标签
重新训练现有网络
要使用 GoogLeNet 对未在原有网络中训练的对象分类,我们可以通过迁移学习对该网络进行重新训练。迁移学习是一种将一类问题的知识应用于另一类相关问题的方法。在本例中,我们只是去除该网络的最后三层,并使用我们自己的图像重新训练。
深度学习的计算资源
训练深度学习模型可能需要几小时、几天乃至数周的时间,具体取决于数据量以及现有的处理能力。选择计算资源是您建立工作流时的重要考虑因素。
目前,有三个常见的计算选项:基于 CPU、基于 GPU 和基于云。
基于 CPU 的计算是最简单也最容易使用的选项。上一节中所述的示例适用于 CPU,但我们建议仅在使用预训练网络的简单示例中使用基于 CPU 的计算。
使用 GPU 可将网络训练时间从数天缩短到几小时。您无需进行任何额外的编程,即可在 MATLAB 中使用 GPU。我们推荐使用支持 NVIDIA® 3.0 算力的 GPU。如果使用多个 GPU,则可进一步加快处理速度。
基于云的 GPU 计算让您不必自己购买和设置硬件。您为了使用本地 GPU 而编写的 MATLAB 代码,只需进行少许设置更改,即可扩展为使用云资源。