本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

MATLAB 中进行深度学习

什么是深度学习?

深度学习是机器学习的一个分支,它训练计算机像人类一样自然地做事情,即:从经验中学习。机器学习算法使用计算方法直接从数据“学习”信息,而不依赖预先确定的方程作为模型。深度学习尤其适用于图像识别,这对于解决人脸识别、运动检测和许多高级驾驶员辅助技术(如自动驾驶、车道检测、行人检测和自动泊车)等问题非常重要。

Deep Learning Toolbox™ 提供简单的 MATLAB® 命令来创建和互连深度神经网络的各个层。示例和预训练网络使得使用 MATLAB 进行深度学习变得很容易,即使没有高级计算机视觉算法或神经网络方面的知识也不会感觉困难。

有关实际深度学习方法的免费实践课程,请参阅深度学习入门之旅

您想要执行什么操作?了解更多信息
执行迁移学习以用您的数据微调网络

使用迁移学习更快地开始深度学习

提示

微调预训练网络来学习一项新任务通常比训练新网络要快得多,也容易得多。

使用预训练网络对图像进行分类预训练的深度神经网络
新建一个用于分类或回归的深度神经网络

创建简单的深度学习网络以用于分类

针对回归训练卷积神经网络

调整图像大小、旋转图像或预处理图像以进行训练或预测预处理图像以进行深度学习
根据文件夹名称自动标注图像数据,或使用 App 以交互方式标注图像数据

Train Network for Image Classification

Image Labeler (Computer Vision Toolbox)

创建深度学习网络以处理序列和时序数据。

使用深度学习进行序列分类

使用深度学习进行时序预测

对图像的每个像素进行分类(例如,道路、汽车、行人)Getting Started with Semantic Segmentation Using Deep Learning (Computer Vision Toolbox)
检测和识别图像中的目标Deep Learning, Semantic Segmentation, and Detection (Computer Vision Toolbox)
对文本数据进行分类 使用深度学习对文本数据进行分类
对音频数据进行分类以实现语音识别使用深度学习进行语音命令识别
可视化网络学习到的特征

Deep Dream Images Using GoogLeNet

可视化卷积神经网络的激活区域

在桌面环境的 CPU、GPU 或并行运行的多个 GPU 上或者云中的群集上进行训练,并处理因太大而无法放入内存的数据集Deep Learning with Big Data on GPUs and in Parallel

要了解有关深度学习应用领域(包括自动驾驶)的更多信息,请参阅深度学习应用

要选择是使用预训练网络还是创建新的深度网络,请参考下表中的情形。

 使用预训练网络进行迁移学习创建新的深度网络
训练数据数百到数千张已标注图像(小)数千到数百万张已标注图像
计算量中等计算量(可选择使用 GPU)计算量大(需要使用 GPU 来提高速度)
训练时间数秒到数分钟解决真实问题需要几天到几周的时间
模型准确度好,取决于预训练模型高,但对于较小的数据集,可能会出现过拟合的情况

有关详细信息,请参阅Choose Network Architecture

深度学习使用神经网络直接从数据中学习有用的特征表示。神经网络结合了多个非线性处理层,它使用并行运行的简单元素并受到生物神经系统的启发。深度学习模型在对象分类方面可以达到非常高的准确度,有时甚至超过人类的水平。

您在训练模型时会使用大量标注数据和神经网络架构,这些架构包含许多层,通常包括一些卷积层。训练这些模型需要进行大量计算,通常可以使用高性能 GPU 来加快训练速度。下图显示卷积神经网络如何将自动从许多图像中学习特征的各层组合起来,以对新图像进行分类。

许多深度学习应用程序都会使用图像文件,有时甚至会用到数百万个图像文件。为了高效地访问大量图像文件进行深度学习,MATLAB 提供了 imageDatastore 函数。使用此函数可以:

  • 自动读取成批图像,以便在机器学习和计算机视觉应用程序中加快处理速度

  • 从图像集合中导入太大而无法放入内存的数据

  • 根据文件夹名称自动标注图像数据

使用 10 行 MATLAB 代码尝试深度学习

此示例说明如何仅通过 10 行 MATLAB 代码使用深度学习来识别实时网络摄像头画面中的对象。尝试此示例以了解在 MATLAB 中使用深度学习有多么简单。

  1. 运行以下命令,根据需要获取下载,连接到网络摄像头,并获得预训练的神经网络。

    camera = webcam; % Connect to the camera
    net = alexnet;   % Load the neural network

    如果您需要安装 webcamalexnet 附加功能,对于每个函数都会显示一条带链接的消息,帮助您使用附加功能资源管理器下载免费的附加功能。或者,请参阅 Deep Learning Toolbox Model for AlexNet NetworkMATLAB Support Package for USB Webcams

    安装 Deep Learning Toolbox Model for AlexNet Network 后,可以使用它对图像进行分类。AlexNet 是预训练的卷积神经网络 (CNN),已基于超过一百万个图像进行训练,可以将图像分为 1000 个对象类别(例如键盘、鼠标、咖啡杯、铅笔和多种动物)。

  2. 运行以下代码来显示和分类实时图像。将网络摄像头对准一个对象,神经网络会报告它认为网络摄像头正在显示哪类对象。网络会持续进行图像分类,直到您按下 Ctrl+C 为止。该代码使用 imresize (Image Processing Toolbox) 针对网络调整图像的大小。

    while true
        im = snapshot(camera);       % Take a picture
        image(im);                   % Show the picture
        im = imresize(im,[227 227]); % Resize the picture for alexnet
        label = classify(net,im);    % Classify the picture
        title(char(label));          % Show the class label
        drawnow
    end

    在此示例中,网络对咖啡杯进行了正确分类。用您周围的物体进行试验,看看该网络的准确度如何。

    要观看此示例的视频,请参阅使用 11 行 MATLAB 代码进行深度学习

    要了解如何扩展此示例并显示类的概率分数,请参阅使用深度学习对网络摄像头图像进行分类

    在深度学习的后续步骤中,您可以将预训练网络用于其他任务。通过迁移学习或特征提取解决新的图像数据分类问题。有关示例,请参阅使用迁移学习更快地开始深度学习使用从预训练网络中提取的特征训练分类器。要尝试其他预训练网络,请参阅预训练的深度神经网络

使用迁移学习更快地开始深度学习

深度学习应用中常常用到迁移学习。您可以采用预训练的网络,基于它学习新任务。用迁移学习来微调网络比从头开始训练要快得多,也容易得多。您可以使用较少数量的训练图像快速让网络学习新任务。迁移学习的优势在于,预训练网络已学习一系列丰富的特征,这些特征可以应用于其他各种类似任务。

例如,如果您利用一个基于数千或数百万个图像进行过训练的网络,可以只使用数百个图像重新训练它来进行新目标检测。您可以用比原始训练数据小得多的数据集有效地微调预训练网络。如果您的数据集非常大,则迁移学习可能不会比训练新网络更快。

迁移学习使您能够:

  • 将学习到的预训练网络的特征迁移到新问题上

  • 迁移学习比训练新网络更快更容易

  • 减少训练时间和数据集大小

  • 无需了解如何创建全新网络,即可进行深度学习

有关交互方式的示例,请参阅使用 Deep Network Designer 进行迁移学习

有关编程方式的示例,请参阅训练深度学习网络以对新图像进行分类

使用从预训练网络中提取的特征训练分类器

特征提取让您可以利用预训练网络的强大功能,而无需在训练方面投入时间和精力。特征提取可能是使用深度学习的最快方法。您从预训练网络中提取学习到的特征,并使用这些特征来训练分类器,例如,支持向量机(SVM - 需要 Statistics and Machine Learning Toolbox™)。例如,如果使用 alexnet 训练过的 SVM 能够基于您的训练集和验证集达到 90% 以上的准确度,则可能不值得为再提高一点准确度而通过迁移学习进行微调。如果您对较小的数据集进行微调,可能还存在过拟合的风险。如果 SVM 无法达到对您的应用来说足够好的准确度,您可以通过微调来提高准确度。

有关示例,请参阅使用预训练网络提取图像特征

在并行运行的 CPU、GPU 上和云上使用大数据进行深度学习

神经网络本质上是并行算法。您可以通过 Parallel Computing Toolbox™ 来利用这种并行机制,在多核 CPU、图形处理单元 (GPU) 以及具有多个 CPU 和 GPU 的计算机群集之间分配训练。

训练深度网络的计算量非常巨大,使用高性能 GPU 通常可以加快训练速度。如果您没有合适的 GPU,您可以在一个或多个 CPU 内核上进行训练。您可以在单个 GPU 或 CPU 上或者在多个 GPU 或 CPU 内核上或在群集上以并行方式训练卷积神经网络。使用 GPU 或并行选项需要 Parallel Computing Toolbox。

您不需要使用多台计算机来解决数据集太大而无法放入内存的问题。您可以使用 imageDatastore 函数处理批量数据,而无需使用计算机群集。但是,如果您有可用的群集,将您的代码放入数据存储库会很有帮助,这样可以避免到处移动大量数据。

要了解有关深度学习硬件和内存设置的详细信息,请参阅Deep Learning with Big Data on GPUs and in Parallel

相关主题