使用深度网络设计器构建网络
使用深度网络设计器以交互方式构建和编辑深度学习网络。使用此 app,您可以导入网络或从头开始构建网络,查看和编辑层属性,组合网络,并生成代码来创建网络架构。然后,可以使用深度网络设计器训练网络,或通过命令行导出网络进行训练。
您可以使用深度网络设计器执行一序列网络构造任务:
通过从网络层库中拖出模块并连接它们来组建一个网络。要快速搜索层,请使用网络层库窗格中的过滤层搜索框。
you can add layers from the workspace to the network in the designer pane.
click new.
pause on from workspace and click import.
choose the layers or network to import and click ok.
click add to add the layers or network to the designer pane.
you can also load pretrained networks by clicking new and selecting them from the start page.
要查看和编辑层属性,请选择一个层。有关层属性的信息,请点击层名称旁边的帮助图标。
有关所有层属性的信息,请点击页上的表中的层名称。
完成构造网络后,您就可以对它进行分析,以检查是否有错误。有关详细信息,请参阅检查网络。
迁移学习
深度学习应用中常常用到迁移学习。您可以采用预训练的网络,基于它学习新任务。与使用随机初始化的权重从头训练网络相比,通过迁移学习微调网络要更快更简单。您可以使用较少数量的训练图像快速地将已学习的特征迁移到新任务。
深度网络设计器提供一系列适用于通过图像数据进行迁移学习的预训练网络。
加载预训练网络
打开 app,选择一个预训练网络。您也可以通过选择设计器选项卡并点击新建来加载一个预训练网络。如果您需要下载网络,请在网络上暂停,然后点击安装打开附加功能资源管理器。
提示
要开始下载,请尝试选择一个更快的网络,例如 squeezenet 或 googlenet。一旦您了解到哪些设置运行良好,请尝试更准确的网络,例如 inception-v3 或 resnet,看看这是否能改进您的结果。有关选择预训练网络的详细信息,请参阅预训练的深度神经网络。
适应预训练网络
要为迁移学习准备网络,请替换最后一个可学习层和最终分类层。
如果最后一个可学习层是二维卷积层(例如,squeezenet 中的
'conv10'
层):将一个新 convolution2dlayer 拖到画布上。将 numfilters 属性设置为新的类数目,将 filtersize 设置为
1,1
。通过增加 weightlearnratefactor 和 biaslearnratefactor 值更改学习率,使新层的学习率快于迁移层的学习率。
删除最后一个 convolution2dlayer,改为连接新层。
如果最后一个可学习层是全连接层(大多数预训练网络,例如 googlenet):
将新的 fullyconnectedlayer 拖到画布上,并将 outputsize 属性设置为新的类数目。
通过增加 weightlearnratefactor 和 biaslearnratefactor 值更改学习率,使新层的学习率快于迁移层的学习率。
删除最后一个 fullyconnectedlayer,改为连接新层。
接下来,删除分类输出层。然后,将新的 classificationlayer 拖到画布上并连接它。输出层的默认设置表示它将在训练期间学习类的数目。
要检查网络是否准备好开始训练,请在设计器选项卡上,点击分析。
有关如何重新训练预训练网络以对新图像进行分类的示例,请参阅。如果您有 audio toolbox™,还可以加载适用于音频任务的预训练网络。有关说明如何重新训练预训练网络以对一组新音频信号进行分类的示例,请参阅。
您也可以使用预训练网络和迁移学习处理回归任务。有关详细信息,请参阅将分类网络转换为回归网络。
图像分类
您可以使用深度网络设计器通过从网络层库中拖动层并连接它们来构建图像分类网络。您也可以在命令行中创建网络,然后将该网络导入深度网络设计器中。
例如,创建一个网络,对分成 10 个类的 28×28 图像的数据集进行图像分类训练。
inputsize = [28 28 1]; numclasses = 10; layers = [ imageinputlayer(inputsize) convolution2dlayer(5,20) batchnormalizationlayer relulayer fullyconnectedlayer(numclasses) softmaxlayer classificationlayer]; deepnetworkdesigner(layers)
要使此网络适应您自己的数据,请将图像输入层的 inputsize 设置为与您的图像输入大小匹配,并将全连接层的 outputsize 设置为您的数据中的类数目。对于更复杂的分类任务,请创建一个更深的网络。有关详细信息,请参阅深度网络。
有关如何创建和训练图像分类网络的示例,请参阅。
序列分类
您可以使用深度网络设计器从头开始构建一个序列网络,也可以从起始页使用一个预置的未经训练的网络。打开深度网络设计器起始页。在序列到标签上暂停,然后点击打开。这会打开一个适合序列分类问题的预置网络。
您可以调整此序列网络,以使用您的数据进行训练。假设您有包含 12 个特征和 9 个类的数据。要调整此网络,请选择 sequenceinputlayer,并将 inputsize 设置为 12
。
然后,选择 fullyconnectedlayer,并将 outputsize 设置为 9
,即类的数目。
网络现已准备好进行训练。要在深度网络设计器中训练网络,请创建一个包含预测变量和响应变量的 。有关详细信息,请参阅。有关说明如何使用深度网络设计器创建合并数据存储和训练序列到序列回归网络的示例,请参阅。有关如何导出在深度网络设计器中构建的网络并使用命令行函数对其进行训练的示例,请参阅。
数值数据分类
如果您有包含数值特征的数据集(例如,一个不包含空间或时间维度的数值数据集合),则可以使用特征输入层训练深度学习网络。有关特征输入层的详细信息,请参阅 。
您可以使用深度网络设计器构造一个合适的网络,也可以在命令行中创建该网络并将其导入深度网络设计器中。
例如,为包含 10 个类的数值数据创建一个网络,其中每个观测值由 20 个特征组成。
inputsize = 20; numclasses = 10; layers = [ featureinputlayer(inputsize,'normalization','zscore') fullyconnectedlayer(50) batchnormalizationlayer relulayer fullyconnectedlayer(numclasses) softmaxlayer classificationlayer]; deepnetworkdesigner(layers)
要使此网络适应您自己的数据,请将特征输入层的 inputsize 设置为与数据中的特征数目匹配,并将全连接层的 outputsize 设置为与数据中的类数目匹配。对于更复杂的分类任务,请创建一个更深的网络。有关详细信息,请参阅深度网络。
要在深度网络设计器中使用表中的数据训练网络,必须首先将数据转换为合适的数据存储。例如,首先将您的表转换为包含预测变量和响应变量的数组。然后,将数组转换为 对象。最后,将预测变量和响应变量数组数据存储组合为一个 对象。然后,您可以使用合并数据存储在深度网络设计器中进行训练。有关详细信息,请参阅。您也可以通过将网络导出到工作区,使用表数据和 trainnetwork
函数对网络进行训练。
将分类网络转换为回归网络
通过替换网络的最终层,可以将分类网络转换为回归网络。当您要选取一个预训练的分类网络并对其进行重新训练以用于回归任务时,转换非常有用。
例如,假设您有一个 googlenet 预训练网络。要将此网络转换为具有单个响应的回归网络,请将最终全连接层、softmax 层和分类输出层替换为一个 outputsize 设置为 1(响应数量)的全连接层和一个回归层。
如果您的输出有多个响应,请将全连接层的 outputsize 值更改为响应数量。
多输入和多输出网络
多输入
如果网络需要来自多个数据源或具有不同格式的数据,您可以定义一个具有多个输入的网络。例如,一些网络需要从多个传感器以不同分辨率捕获的图像数据。
使用深度网络设计器,您可以控制每层的输入和输出。例如,要创建一个具有多个图像输入的网络,请创建两个分支,每个分支从一个图像输入层开始。
您可以使用深度网络设计器和数据存储对象来训练一个具有相同输入类型的多输入网络,例如,来自两个不同数据源的图像。对于具有多种格式数据的网络,例如图像和序列数据,请使用自定义训练循环来训练网络。有关详细信息,请参阅将 dlnetwork 用于自定义训练循环。
多输出
您可以为需要不同格式的多个响应的任务(例如,需要分类输出和数值输出的任务)定义具有多个输出的网络。
使用深度网络设计器,您可以控制每层的输出。
要训练一个多输出网络,必须使用自定义训练循环。自定义训练循环必须使用一个不包含任何输出层的 dlnetwork
对象。有关详细信息,请参阅将 dlnetwork 用于自定义训练循环。
深度网络
构建大型网络可能很困难,您可以使用深度网络设计器来加快构造速度。您可以一次处理多个层块。选择多个层,然后复制和粘贴或删除。例如,您可以使用层块来创建卷积、批量归一化和 relu 层组的多个副本。
对于经过训练的网络,复制层会同时复制权重和偏置。
您还可以从工作区复制子网络,以便使用该 app 轻松连接。要将网络或层导入 app 中,请点击新建 > 从工作区导入。点击添加将层添加到当前网络。
高级深度学习应用
您可以使用深度网络设计器为高级应用(如计算机视觉或图像处理任务)构建和训练网络。
创建语义分割网络
语义分割描述将图像的每个像素与类标签相关联的过程。语义分割的应用包括自动驾驶中的道路分割以及医疗诊断中的癌细胞分割。
通过将层从网络层库拖到设计器窗格,或在命令行中创建网络并将其导入深度网络设计器中,创建一个语义分割网络。
例如,基于下采样和上采样设计创建一个简单的语义分割网络。
inputsize = [32 32 1]; layers = [ imageinputlayer(inputsize) convolution2dlayer([3,3],64,'padding',[1,1,1,1]) relulayer maxpooling2dlayer([2,2],'stride',[2,2]) convolution2dlayer([3,3],64,'padding',[1,1,1,1]) relulayer transposedconv2dlayer([4,4],64,'stride',[2,2],'cropping',[1,1,1,1]) convolution2dlayer([1,1],2) softmaxlayer pixelclassificationlayer ]; deepnetworkdesigner(layers)
有关构造和训练语义分割网络的详细信息,请参阅 (computer vision toolbox)。
创建图像到图像回归网络
图像到图像回归涉及获取输入图像并产生输出图像,图像通常大小相同。这种类型的网络对于超分辨率、着色或图像去模糊非常有用。
您可以使用深度网络设计器创建图像到图像回归网络。例如,使用 computer vision toolbox™ 中的 unetlayers
函数创建一个适用于图像到图像回归的简单网络架构。此函数提供一个适用于语义分割的网络,该网络可以轻松适应图像到图像回归。
创建一个输入大小为 28×28×1 像素的网络。
layers = unetlayers([28,28,1],2,'encoderdepth',2);
deepnetworkdesigner(layers);
在设计器窗格中,用网络层库中的一个回归层替换 softmax 层和像素分类层。
选择最后一个卷积层,并将 numfilters 属性设置为 1
。
有关构造和训练图像到图像回归网络的详细信息,请参阅。
将 dlnetwork
用于自定义训练循环
您可以使用深度网络设计器构建和分析 dlnetwork
对象。dlnetwork
对象支持使用自动微分的自定义训练循环。当内置训练选项未提供您的任务所需的训练选项时,请使用自定义训练循环。
要检查您的网络是否已准备好使用自定义训练循环进行训练,请点击分析 > 对 dlnetwork 进行分析。有关详细信息,请参阅检查网络。
深度网络设计器不支持使用自定义训练循环进行训练。要使用自定义训练循环训练网络,首先将网络导出到工作区,并将其转换为 dlnetwork
对象。然后,您可以使用 dlnetwork
对象和自定义训练循环来训练网络。有关详细信息,请参阅。
检查网络
要检查您的网络并进一步检查层,请在设计器选项卡上,点击分析。调查问题并检查层属性,以解决网络中的大小不匹配问题。返回到深度网络设计器以编辑层,然后通过再次点击分析检查结果。如果深度学习网络分析器报告零错误,则表示编辑过的网络已准备就绪,可以开始训练。
您还可以针对自定义训练工作流分析网络。点击分析 > 对 dlnetwork 进行分析,分析网络中 dlnetwork
对象的使用情况。例如,网络分析器 会检查层图是否未包含任何输出层。