在 MATLAB 中进行深度学习
什么是深度学习?
深度学习是机器学习的一个分支,它训练计算机像人类一样自然地做事情,即:从经验中学习。深度学习使用神经网络直接从数据中学习有用的特征表示。神经网络结合了多个非线性处理层,它使用并行运行的简单元素并受到生物神经系统的启发。深度学习模型在对象分类方面可以达到非常高的准确度,有时甚至超过人类的水平。
Deep Learning Toolbox™ 提供简单的 MATLAB® 命令来创建和互连深度神经网络的各个层。示例和预训练网络使得使用 MATLAB 进行深度学习变得很容易,即使没有高级计算机视觉算法或神经网络方面的知识也不会感觉困难。
有关实际深度学习方法的免费实践课程,请参阅深度学习入门之旅。要快速开始深度学习,请参阅使用 10 行 MATLAB 代码尝试深度学习。
使用迁移学习更快地开始深度学习
深度学习应用中常常用到迁移学习。您可以采用预训练的网络,基于它学习新任务。用迁移学习来微调网络比从头开始训练要快得多,也容易得多。您可以使用较少数量的训练图像快速让网络学习新任务。迁移学习的优势在于,预训练网络已学习一系列丰富的特征,这些特征可以应用于其他各种类似任务。有关交互方式的示例,请参阅使用深度网络设计器进行迁移学习。有关编程方式的示例,请参阅训练深度学习网络以对新图像进行分类。
要选择是使用预训练网络还是创建新的深度网络,请参考下表中的情形。
使用预训练网络进行迁移学习 | 创建新的深度网络 | |
---|---|---|
训练数据 | 数百到数千个已标注数据(小) | 数千到数百万个已标注数据 |
计算量 | 中等计算量(可选择使用 GPU) | 计算量大(需要使用 GPU 来提高速度) |
训练时间 | 数秒到数分钟 | 解决真实问题需要几天到几周的时间 |
模型准确度 | 好,取决于预训练模型 | 高,但对于较小的数据集,可能会出现过拟合的情况 |
要探查一系列预训练网络,请使用深度网络设计器。
深度学习工作流
要了解有关深度学习应用领域的更多信息,请参阅应用。
领域 | 示例工作流 | 了解更多信息 | |
---|---|---|---|
图像分类、回归和处理 |
| 将深度学习应用于图像数据任务。 例如,使用深度学习进行图像分类和回归。 | |
序列和时间序列 |
| 将深度学习应用于序列和时间序列任务。 例如,使用深度学习进行序列分类和时间序列预测。 | |
计算机视觉 |
| 将深度学习应用于计算机视觉应用。 例如,使用深度学习进行语义分割和目标检测。 | Getting Started with Semantic Segmentation Using Deep Learning (Computer Vision Toolbox) Recognition, Object Detection, and Semantic Segmentation (Computer Vision Toolbox) |
音频处理 |
| 将深度学习应用于音频和语音处理应用。 例如,将深度学习用于说话者识别、语音命令识别和声学场景识别。 | Deep Learning for Audio Applications (Audio Toolbox) |
自动驾驶 |
| 将深度学习应用于自动驾驶应用。 例如,使用深度学习进行车辆检测和语义分割。 | |
信号处理 |
| 将深度学习应用于信号处理应用。 例如,使用深度学习进行波形分割、信号分类以及语音信号去噪等。 | |
无线通信 |
| 将深度学习应用于无线通信系统。 例如,将深度学习用于定位、频谱感知、自编码器设计和数字预失真 (DPD)。 | Spectrum Sensing with Deep Learning to Identify 5G and LTE Signals Three-Dimensional Indoor Positioning with 802.11az Fingerprinting and Deep Learning (WLAN Toolbox) |
增强学习 |
| 通过与未知动态环境交互来训练深度神经网络智能体。 例如,使用强化学习来训练策略,可以为复杂应用(如资源分配、机器人和自主系统)实现控制器和决策算法。 | |
计算金融 |
| 将深度学习应用于金融工作流。 例如,将深度学习用于包括产品定价、交易和风险管理在内的应用。 | Compare Deep Learning Networks for Credit Default Prediction |
激光雷达处理 |
| 应用深度学习算法处理激光雷达点云数据。 例如,使用深度学习进行语义分割,或对以三维形式组织的激光雷达点云数据进行目标检测。 | Aerial Lidar Semantic Segmentation Using PointNet++ Deep Learning |
文本分析 |
| 将深度学习算法应用于文本分析应用。 例如,将深度学习用于文本分类、语言翻译和文本生成。 | |
预测性维护 |
| 将深度学习应用于预测性维护应用。 例如,使用深度学习进行故障检测和剩余使用寿命估计。 |
深度学习 App
使用各种 App,以交互方式处理数据、可视化和训练网络、跟踪试验以及量化网络。
您可以在训练前使用 App 标注真实值数据来处理您的数据。有关选择标注 App 的详细信息,请参阅Choose an App to Label Ground Truth Data。
名称 | 描述 | 了解更多信息 | |
---|---|---|---|
深度网络设计器 | | 构建、可视化、编辑和训练深度学习网络。 | Train Network for Time Series Forecasting Using Deep Network Designer |
试验管理器 | | 创建深度学习试验,在多个初始条件下训练网络,并比较结果。 | |
深度网络量化器 | | 通过将卷积层的权重、偏置和激活量化为 8 位定标整数数据类型,降低深度神经网络的内存要求。 | |
强化学习设计器 (Reinforcement Learning Toolbox) | | 设计、训练和仿真强化学习智能体。 | Design and Train Agent Using Reinforcement Learning Designer (Reinforcement Learning Toolbox) |
图像标注器 (Computer Vision Toolbox) | | 标注图像集合中的真实值数据。 | Get Started with the Image Labeler (Computer Vision Toolbox) |
视频标注器 (Computer Vision Toolbox) | | 标注视频、图像序列或自定义数据源读取器中的真实值数据。 | Get Started with the Video Labeler (Computer Vision Toolbox) |
真实值标注器 (Automated Driving Toolbox) | | 标注多个视频、图像序列或激光雷达点云中的真实值数据。 | Get Started with Ground Truth Labelling (Automated Driving Toolbox) |
激光雷达标注器 (Lidar Toolbox) | | 标注点云或点云序列中的目标。该 App 从 PLY、PCAP、LAS、LAZ、ROS 和 PCD 文件读取点云数据。 | Get Started with the Lidar Labeler (Lidar Toolbox) |
信号标注器 (Signal Processing Toolbox) | | 标注信号以用于分析或用于机器学习和深度学习应用。 | Using Signal Labeler App (Signal Processing Toolbox) |
使用从预训练网络中提取的特征训练分类器
特征提取让您可以利用预训练网络的强大功能,而无需在训练方面投入时间和精力。特征提取可能是使用深度学习的最快方法。您从预训练网络中提取学习到的特征,并使用这些特征来训练分类器,例如,支持向量机(SVM - 需要 Statistics and Machine Learning Toolbox™)。例如,如果使用 alexnet
训练过的 SVM 能够基于您的训练集和验证集达到 90% 以上的准确度,则可能不值得为再提高一点准确度而通过迁移学习进行微调。如果您对较小的数据集进行微调,可能还存在过拟合的风险。如果 SVM 无法达到对您的应用来说足够好的准确度,您可以通过微调来提高准确度。
有关示例,请参阅使用预训练网络提取图像特征。
在并行运行的 CPU、GPU 上和云上使用大数据进行深度学习
训练深度网络属于计算密集型运算,并且可能花费数小时的计算时间;但神经网络本质上是并行算法。您可以使用 Parallel Computing Toolbox™,通过使用高性能 GPU 和计算机集群并行运行来利用这种并行机制。要了解有关并行、云中或使用 GPU 的深度学习的详细信息,请参阅Scale Up Deep Learning in Parallel, on GPUs, and in the Cloud。
使用 MATLAB® 中的数据存储,可以便捷地处理和表示太大而无法一次放入内存的数据集合。要了解有关使用大型数据集进行深度学习的详细信息,请参阅Deep Learning with Big Data。
使用 Simulink 进行深度学习
通过使用 Deep Learning Toolbox™ 中包含的 Deep Neural Networks 模块库中的模块,或通过使用 Computer Vision Toolbox™ 中的 Analysis & Enhancement 模块库中的 Deep Learning Object Detector 模块,在 Simulink® 模型中实现深度学习功能。
有关详细信息,请参阅Simulink 深度学习。
模块 | 描述 |
---|---|
使用经过训练的深度学习神经网络对数据进行分类 | |
使用经过训练的深度学习神经网络预测响应 | |
使用经过训练的深度学习循环神经网络对数据进行分类 | |
使用经过训练的循环神经网络预测响应 | |
Deep Learning Object Detector (Computer Vision Toolbox) | 使用经过训练的深度学习目标检测器检测目标 |
深度学习可解释性
深度学习网络经常被描述为“黑盒”,因为网络作出某种决策的原因并不始终是显而易见的。您可以使用可解释性方法将网络行为转换为人们可以理解的输出。这种可解释的输出可以回答关于网络预测的问题。
Deep Learning Toolbox 提供了几种深度学习可视化方法,可帮助您调查和理解网络行为。有关示例,请参阅 gradCAM
、occlusionSensitivity
和 imageLIME
。有关详细信息,请参阅Deep Learning Visualization Methods。
深度学习自定义
您可以通过各种方法来训练和自定义深度学习模型。例如,您可以使用内置层来构建网络,或者定义自定义层。然后,您可以使用内置训练函数 trainNetwork
来训练您的网络,或将深度学习模型定义为函数并使用自定义训练循环。要帮助决定使用哪种方法,请参考下表。
方法 | 用例 | 了解更多信息 |
---|---|---|
内置训练和层 | 适用于大多数深度学习任务。 |
|
自定义层 | 如果 Deep Learning Toolbox 没有提供您任务所需的层,则您可以创建一个自定义层。 | |
自定义训练循环 | 如果您需要额外的自定义,您可以使用自定义的训练循环来构建和训练您的网络。 |
有关详细信息,请参阅 Train Deep Learning Model in MATLAB。
深度学习导入和导出
您可以从 TensorFlow™ 2、TensorFlow-Keras、PyTorch® 和 ONNX™(开放式神经网络交换)模型格式导入神经网络和层图。您还可以将 Deep Learning Toolbox 神经网络和层图导出为 TensorFlow 2 和 ONNX 模型格式。
导入函数
外部深度学习平台和模型格式 | 将模型作为神经网络导入 | 将模型作为层图导入 |
---|---|---|
SavedModel 格式的 TensorFlow 神经网络 | importTensorFlowNetwork | importTensorFlowLayers |
HDF5 或 JSON 格式的 TensorFlow-Keras 神经网络 | importKerasNetwork | importKerasLayers |
.pt 文件格式的追溯的 PyTorch 模型 | importNetworkFromPyTorch | 不适用 |
ONNX 模型格式的神经网络 | importONNXNetwork | importONNXLayers |
相对于 importKerasNetwork
和 importKerasLayers
函数,推荐使用 importTensorFlowNetwork
和 importTensorFlowLayers
函数。有关详细信息,请参阅Recommended Functions to Import TensorFlow Models。
如果一个模型具有函数 importTensorFlowNetwork
、importTensorFlowLayers
、importNetworkFromPyTorch
、importONNXNetwork
和 importONNXLayers
无法转换为内置 MATLAB 层的 TensorFlow 层、PyTorch 层或 ONNX 运算符,则当您导入该模型时,这些函数会创建自动生成的自定义层。这些函数将自动生成的自定义层保存到当前文件夹中的包中。有关详细信息,请参阅Autogenerated Custom Layers。
导出函数
导出神经网络或层图 | 外部深度学习平台和模型格式 |
---|---|
exportNetworkToTensorFlow | Python® 包中的 TensorFlow 2 模型 |
exportONNXNetwork | ONNX 模型格式 |
exportNetworkToTensorFlow
函数将 Deep Learning Toolbox 神经网络或层图作为 TensorFlow 模型保存在 Python 包中。有关如何加载导出的模型并将其保存为标准 TensorFlow 格式的详细信息,请参阅Load Exported TensorFlow Model和Save Exported TensorFlow Model in Standard Format。
通过使用 ONNX 作为中间格式,您可以与支持 ONNX 模型导出或导入的其他深度学习框架进行互操作。