Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

深度网络设计器

设计、可视化和训练深度学习网络

说明

深度网络设计器可用于导入、构建、可视化、编辑和训练深度学习网络。使用此 App,您可以:

  • 构建、编辑和组合网络。

  • 加载预训练网络,并编辑它们以进行迁移学习。

  • 从 PyTorch® 和 TensorFlow™ 导入网络。

  • 分析网络以确保网络架构定义正确,并在训练前检测问题。

  • 导入和可视化数据存储以进行训练和验证。

  • 对图像分类训练数据应用增强,并可视化类标签的分布。

  • 训练网络,并使用准确度、损失和验证度量图监控训练。

  • 将经过训练的网络导出到工作区或 Simulink®

  • 生成用于构建和训练网络的 MATLAB® 代码,并使用试验管理器创建超参数调节试验。

Deep Network Designer app

打开 深度网络设计器 App

  • MATLAB 工具条:在 App选项卡上的机器学习和深度学习下,点击 App 图标。

  • MATLAB 命令提示符:输入 deepNetworkDesigner

示例

全部展开

在深度网络设计器中检查预训练网络。

打开 App,选择一个预训练网络。您也可以通过选择设计器选项卡并点击新建来加载一个预训练网络。如果您需要下载网络,可点击安装,打开附加功能资源管理器。深度网络设计器包含适用于图像和音频任务的预训练网络。加载预训练的音频网络需要 Audio Toolbox™。

提示

要开始下载,请尝试选择一个更快的图像分类网络,例如 SqueezeNet 或 GoogLeNet。一旦您了解到哪些设置运行良好,请尝试更准确的网络,例如 Inception-v3 或 ResNet,看看这是否能改进您的结果。有关选择预训练网络的详细信息,请参阅预训练的深度神经网络

Deep Network Designer start page showing available networks

设计器窗格中,可视化并探查网络。有关可用预训练图像分类网络的列表以及如何比较它们,请参阅预训练的深度神经网络

Deep Network Designer displaying a pretrained image classification network

有关使用深度网络设计器构造网络的信息,请参阅使用深度网络设计器构建网络

通过在深度网络设计器中编辑网络,准备网络以进行迁移学习。

迁移学习指采用预训练的深度学习网络并对其进行微调以学习新任务的过程。您可以使用较少数量的训练图像快速地将已学习的特征迁移到新任务。因此,迁移学习通常比从头开始训练网络更快、更简单。要使用预训练网络进行迁移学习,您必须更改类的数量以匹配新数据集。

用 SqueezeNet 打开深度网络设计器。

deepNetworkDesigner(squeezenet)

要为迁移学习准备网络,请编辑最后一个可学习层和最终分类层。对于 SqueezeNet,最后一个可学习层是名为 'conv10' 的二维卷积层。

  • 选择 'conv10' 层。在属性窗格的底部,点击解锁层。解锁层将删除所有层可学习参数。在出现的警告对话框中,点击仍要解锁。这将解锁层属性,以便您可以使其适应新任务。将 NumFilters 属性设置为新的类数目。

  • 通过增加 WeightLearnRateFactorBiasLearnRateFactor 值更改学习率,使新层的学习率快于迁移层的学习率。

Convolution 2-D layer selected in Deep Network Designer. The Properties pane shows NumFilters set to 5.

提示

对于大多数预训练网络(例如 GoogLeNet),最后一个可学习层是全连接层。要为迁移学习准备网络,请选择全连接层并将 OutputSize 属性设置为新的类数量。有关示例,请参阅深度网络设计器快速入门

在 R2023b 之前: 要编辑新任务的层属性,您必须替换层,而不是解锁层。

接下来,编辑分类输出层。在属性窗格中,点击解锁层,然后点击仍要解锁。输出层的默认设置表示网络在训练期间学习的类数量。

Classification layer selected in Deep Network Designer. The Properties pane shows OutputSize set to auto.

通过点击设计器选项卡中的分析,检查您的网络。如果深度学习网络分析器报告零错误,则表示网络已准备就绪,可以开始训练。有关说明如何训练网络以对新图像进行分类的示例,请参阅使用深度网络设计器进行迁移学习

从 PyTorch 或 TensorFlow 导入一个神经网络。

要从外部平台导入网络,请使用深度网络设计器起始页。

  • 对于 PyTorch,请在从 PyTorch 图标上点击导入。在导入网络对话框中,选择模型文件的位置。

  • 对于 TensorFlow,请在从 TensorFlow 图标上点击导入。在导入网络对话框中,选择模型文件夹的位置。

选择网络位置后,点击导入

深度网络设计器将导入网络并生成导入报告导入报告显示在使用网络进行训练或推断之前需要注意的任何网络问题。例如,如果 App 无法推断输入大小,或存在您需要完成的任何占位符层,则报告会显示警告。

Example of an import report. The report displays a warning about the input layer and an error about placeholder layers.

从 PyTorch 或 TensorFlow 导入的网络不支持 App 中的数据导入和训练。

有关显示如何将 PyTorch 网络导入深度网络设计器并修复任何问题的示例,请参阅Import PyTorch® Model Using Deep Network Designer

有关理解和编辑层属性的帮助,请点击层名称旁边的帮助图标。

设计器窗格中,选择一个层来查看和编辑属性。点击层名称旁边的帮助图标,了解有关层属性的详细信息。

Cross channel normalization layer selected in Deep Network Designer

有关层属性的详细信息,请参阅深度学习层列表

在深度网络设计器中将工作区中的层添加到网络。

在深度网络设计器中,您可以通过将内置层从网络层库拖到设计器窗格并连接它们来构建网络。您还可以在设计器窗格中将工作区中的自定义层添加到网络中。假设在变量 myCustomLayer 中存储了一个自定义层。

  1. 设计器选项卡中点击新建

  2. 从工作区上暂停,然后点击导入

  3. 选择 myCustomLayer,然后点击确定

  4. 点击添加

该 App 将自定义层添加到设计器窗格的顶部。要查看新层,请使用鼠标放大或点击放大

设计器窗格中,将 myCustomLayer 连接到网络。有关说明如何在深度网络设计器中使用自定义层构建网络的示例,请参阅

您也可以在深度网络设计器中组合网络。例如,您可以通过将预训练网络与解码器子网络组合来创建一个语义分割网络。

要查看或编辑自定义层类定义,请选择层,然后点击编辑层代码。有关详细信息,请参阅View Autogenerated Custom Layers Using Deep Network Designer (自 R2023a 起)

将数据导入深度网络设计器中进行训练。

您可以使用深度网络设计器的数据选项卡来导入训练数据和验证数据。深度网络设计器支持导入图像数据和数据存储对象。根据任务类型选择导入方法。

任务数据类型数据导入方法可视化示例
图像分类

ImageDatastore 对象,或者是具有子文件夹(其中包含每个类的图像)的文件夹。类标签源自子文件夹名称。

选择导入数据 > 导入图像分类数据

Import Image Data dialog box

您可以选择增强选项,并在“导入图像数据”对话框中指定验证数据。有关详细信息,请参阅Import Data into Deep Network Designer

Data tab of Deep Network Designer displaying a histogram of the class labels and a selection of random images from the imported data

其他扩展工作流(如数值特征输入、无法放入内存的数据、图像处理以及音频和语音处理)

数据存储。

对于其他扩展工作流,请使用合适的数据存储对象。例如,AugmentedImageDatastoreCombinedDatastorepixelLabelImageDatastore (Computer Vision Toolbox)audioDatastore (Audio Toolbox) 或自定义数据存储。

您可以导入和训练任何能够与 trainNetwork 函数配合使用的数据存储对象。有关为深度学习应用构造和使用数据存储对象的详细信息,请参阅Datastores for Deep Learning

选择导入数据 > 导入自定义数据

Import Datastore dialog box

您可以在“导入自定义数据”对话框中指定验证数据。有关详细信息,请参阅Import Data into Deep Network Designer

Data tab of Deep Network Designer displaying a preview of the first five observations in the datastore

使用深度网络设计器训练深度神经网络。

使用深度网络设计器,您可以使用图像数据或能够与 trainNetwork 函数配合使用的任何数据存储对象来训练网络。例如,您可以使用 CombinedDatastore 对象训练语义分割网络或多输入网络。有关将数据导入深度网络设计器的详细信息,请参阅Import Data into Deep Network Designer

要使用导入深度网络设计器中的数据训练网络,请在训练选项卡上,点击训练。该 App 显示训练进度的动画图。该图显示小批量损失和准确度、验证损失和准确度,以及关于训练进度的附加信息。该图右上角有停止按钮 。点击该按钮可停止训练并返回网络的当前状态。

Training progress plot in Deep Network Designer

有关详细信息,请参阅

如果您需要更好地控制训练,请点击训练选项以选择训练设置。有关选择训练选项的详细信息,请参阅 trainingOptions

Training Options dialog box in Deep Network Designer

有关如何训练图像分类网络的示例,请参阅使用深度网络设计器进行迁移学习。有关如何训练序列到序列 LSTM 网络的示例,请参阅使用深度网络设计器训练网络以进行时间序列预测

要使用深度网络设计器不支持的数据训练网络,请选择设计器选项卡,然后点击导出以导出初始网络架构。然后,您可以通过编程方式训练网络,例如,使用自定义训练循环。

将在深度网络设计器中创建的网络架构导出到工作区或 Simulink,并生成代码以重新创建网络和训练。

  • 要将具有初始权重的网络架构导出到工作区,请在设计器选项卡上,点击导出。根据网络架构,深度网络设计器会将网络导出为 LayerGraph lgraph 或 Layer 对象 layers。

  • 要将在深度网络设计器中训练的网络导出到工作区,请在训练选项卡上,点击导出。深度网络设计器将经过训练的网络架构导出为 DAGNetwork 对象 trainedNetwork。深度网络设计器还将训练结果(如训练和验证准确度)导出为结构体数组 trainInfoStruct。

  • 要将在深度网络设计器中训练的网络导出到 Simulink,请在训练选项卡上,点击导出 > 导出到 Simulink。深度网络设计器将经过训练的网络保存为 MAT 文件,并生成表示经过训练的网络的 Simulink 模块。生成的模块取决于训练的网络的类型。

    • Image Classifier - 使用经过训练的深度学习神经网络对数据进行分类。

    • Predict - 使用经过训练的深度学习神经网络预测响应。

    • Stateful Classify - 使用经过训练的循环神经网络对数据进行分类。

    • Stateful Predict - 使用经过训练的循环神经网络预测响应。

有关显示如何将网络从深度网络设计器导出到 Simulink 的示例,请参阅

要重新创建您在深度网络设计器中构造和训练的网络,请生成 MATLAB 代码。

  • 要重新创建网络层,包括任何可学习参数,请在设计器选项卡上,选择导出 > 生成带参数的网络代码

  • 要仅重新创建网络层,请在设计器选项卡上,选择导出 > 生成不带参数的网络代码

  • 要重新创建网络、数据导入和训练,请在训练选项卡上,选择导出 > 生成训练代码

生成脚本后,您可以执行以下任务。

  • 要重新创建在 App 中创建的网络层,请运行脚本。如果您生成了训练脚本,运行该脚本还会复制网络训练。

  • 检查代码,了解如何以编程方式创建和连接层,以及如何训练深度网络。

  • 要修改层,请编辑代码。您也可以运行脚本并将网络导回 App 中进行编辑。

有关详细信息,请参阅Generate MATLAB Code from Deep Network Designer

您还可以使用深度网络设计器创建深度学习试验,这些试验会扫描一系列超参数值,或使用贝叶斯优化来找到最佳训练选项。有关如何使用试验管理器调整在深度网络设计器中训练的网络超参数的示例,请参阅

相关示例

编程用途

全部展开

deepNetworkDesigner 打开深度网络设计器。如果深度网络设计器已打开,deepNetworkDesigner 会将焦点放在该 App 上。

deepNetworkDesigner(net) 打开深度网络设计器,并将指定的网络加载到该 App 中。网络可以是串行网络、DAG 网络、层图、层数组或 dlnetwork 对象。dlnetwork 对象不支持 App 中的数据导入和训练。

例如,使用预训练的 SqueezeNet 网络打开深度网络设计器。

net = squeezenet;
deepNetworkDesigner(net);

如果深度网络设计器已打开,deepNetworkDesigner(net) 会将焦点放在该 App 上,并提示您添加或替换任何现有网络。

提示

要训练多个网络并比较结果,请尝试试验管理器。您可以使用深度网络设计器创建适用于试验管理器的试验。

版本历史记录

在 R2018b 中推出