主要内容

analyzeNetwork

深度学习网络体系结构分析

描述

使用analyzeNetwork可视化和了解网络的架构,检查是否已正确定义的架构,并在训练前发现问题。问题:analyzeNetwork检测包括丢失或未连接的图层、大小不正确的图层输入、数量不正确的图层输入以及无效的图形结构。

提示

要交互式可视化,分析和培训网络,使用deepNetworkDesigner(净)。有关详细信息,请参阅深层网络设计师

训练网络

例子

分析网络(分析SeriesNetwork达格网络目的。该功能显示网络架构的交互式可视化,并提供有关网络层的详细信息。层信息包括层激活的数量和大小、可学习的参数和状态参数。

网络层

例子

分析网络(层数分析在指定的网络层层数还可以检测的错误和问题Trainnetwork.工作流程。层数可以是一个数组或LayerGraph对象。该功能以交互式的方式显示网络架构,并提供有关网络层的详细信息。层信息包括数量和大小层激活,可学习参数和状态参数的。

例子

分析网络(层数“TargetUsage”,目标分析在指定的网络层层数用于指定的目标工作流。分析工作流时使用此语法的数组或层图dlnetwork工作流程。

分析网络(层数dlX1,…,dlXn,'TargetUsage','dlnetwork')使用示例网络输入分析网络层dlX1,…,dlXn.该软件通过网络传播示例输入,以确定层激活、可学习参数和状态参数的数量和大小。使用此语法可以分析具有一个或多个未连接到输入层的输入的网络。

dlnetwork对象

分析网络(数据链路分析dlnetwork对象的定制培训循环的工作流程。该功能以交互式的方式显示网络架构,并提供有关网络层的详细信息。层信息包括数量和大小层激活,可学习参数和状态参数的。

分析网络(数据链路dlX1,…,dlXn分析dlnetwork对象使用例如网络输入dlX1,…,dlXn.该软件通过网络传播示例输入,以确定层激活、可学习参数和状态参数的数量和大小。使用此语法分析未初始化的dlnetwork具有未连接到输入层中的一个或多个输入。

例子

全部收缩

加载预训练的GoogLeNet卷积神经网络。

网= googlenet
net = DAGNetwork with properties: Layers: [144×1 net.cnn.layer. layer] Connections: [170×2 table] InputNames: {'data'} OutputNames: {'output'}

分析了网络。analyzeNetwork显示网络架构的交互式情节和关于所述网络层的含表信息。

使用左侧的绘图调查网络架构。在绘图中选择一个图层。选定的图层在绘图和图层表中高亮显示。

在表中,查看层信息,诸如层性能,层类型和层激活和可学习参数的大小。层的激活是该层的输出。

选择网络中较深的层。请注意,较深层中的激活在空间维度(前两个维度)中较小,在通道维度(最后一个维度)中较大使用这种结构,卷积神经网络可以逐渐增加提取的图像特征数量,同时降低空间分辨率。

通过点击层表右上角的箭头并选择,显示每个层中可学习的参数的总数总可学的.若要按列值对层表排序,将鼠标悬停在列标题上并单击出现的箭头。例如,您可以根据可学习参数的总数对各层进行排序,从而确定哪一层包含的参数最多。

分析网络(net)

创建一个简单的带有快捷连接的卷积网络。将网络的主分支创建为一个层数组,并从层数组创建一个层图。分层图连接所有的层层数按顺序。

layers = [imageInputLayer([32 32 3])]“填充”“一样”)reluLayer('姓名''relu_1')卷积2层(3,16,“填充”“一样”'走吧', 2) reluLayer additionLayer (2'姓名'“add1”)卷积2层(3,16,“填充”“一样”'走吧', 2) reluLayer additionLayer (3'姓名'“add2”) fulllyconnectedlayer (10) softmaxLayer classificationLayer;lgraph = layerGraph(层);

创建快捷连接。其中一个快捷连接包含一个1乘1卷积层斯基普孔夫

skipConv = convolution2dLayer(1,16,'走吧'2,'姓名'“skipConv”);lgraph = addLayers(lgraph,skipConv);lgraph = connectLayers(lgraph,'relu_1'“add1/in2”);lgraph = connectLayers(lgraph,“add1”“add2/in2”);

分析网络架构。analyzeNetwork在网络中查找四个错误。

分析网络(lgraph)

调查和修复网络中的错误。在本例中,以下问题导致错误:

  • 斯基普孔夫层没有连接到网络的其余部分。它应该是之间的快捷连接的一部分add1add2图层。若要修复此错误,请连接add1斯基普孔夫斯基普孔夫add2

  • add2层被指定有三个输入,但层只有两个输入。要修复错误,将输入的数量指定为2

  • 添加层的所有输入必须具有相同的大小,但是add1层有两个大小不同的输入conv_2层有一个'走吧'值为2时,该层在前两个维度(空间维度)中以2的因子对激活进行下采样relu2层,使得它的尺寸与从输入相同relu1,通过设置'走吧'conv_2层到1。

从本例开始,将这些修改应用于层图构造,并创建一个新的层图。

layers = [imageInputLayer([32 32 3])]“填充”“一样”)reluLayer('姓名''relu_1')卷积2层(3,16,“填充”“一样”'走吧',1)reluLayer附加层(2,'姓名'“add1”)卷积2层(3,16,“填充”“一样”'走吧', 2) reluLayer additionLayer (2'姓名'“add2”) fulllyconnectedlayer (10) softmaxLayer classificationLayer;lgraph = layerGraph(层);skipConv = convolution2dLayer(1,16,'走吧'2,'姓名'“skipConv”);lgraph = addLayers(lgraph,skipConv);lgraph = connectLayers(lgraph,'relu_1'“add1/in2”);lgraph = connectLayers(lgraph,“add1”“skipConv”);lgraph = connectLayers(lgraph,“skipConv”“add2/in2”);

分析新架构。新的网络不包含任何错误,并准备进行培训。

分析网络(lgraph)

创建一个自定义的训练循环一层图。对于定制培训循环的工作流程,该层图形不能有一个输出层。

[imageInputLayer([28 28 1],]),“归一化”'没有任何''姓名''输入')convolution2dLayer(5,20,'姓名'“conv1”) batchNormalizationLayer ('姓名'“bn1”)reluLayer('姓名'“relu1”)卷积2层(3,20,“填充”,1,'姓名''CONV2') batchNormalizationLayer ('姓名'“bn2”)reluLayer('姓名'“relu2”20岁的)convolution2dLayer (3“填充”1.'姓名''conv3') batchNormalizationLayer ('姓名'“bn3”)reluLayer('姓名'“relu3”)完全连接层(10,'姓名'“fc”)softmaxLayer('姓名'“softmax”)]; lgraph=层图(层);

层图分析使用analyzeNetwork函数并设置“TargetUsage”选项'dlnetwork'

分析网络(lgraph,“TargetUsage”'dlnetwork'

在这里,函数没有报告任何与层图有关的问题。

要分析具有未连接到输入层的输入的网络,可以向analyzeNetwork函数。您可以在分析时提供示例输入dlnetwork对象,或当您分析数组或LayerGraph对象用于自定义培训工作流“TargetUsage”、“dlnetwork”名称值选项。

定义网络架构。建立一个有两个分支的网络。网络有两个输入,每个分支有一个输入。使用添加层连接分支。

numFilters=24;inputSize=[64 64 3];LayerBranch1=[imageInputLayer(inputSize,“归一化”'没有任何''姓名''输入') convolution2dLayer(3、6 * numFilters,“填充”“一样”'走吧'2,'姓名'“conv1Branch1”)组规范化层(所有渠道的'姓名'“gn1Branch1”)reluLayer('姓名'“relu1Branch1”)convolution2dLayer(3,numFilters,“填充”“一样”'姓名'“conv2Branch1”)组规范化层(“信道逐”'姓名'“gn2Branch1”)附加层(2,'姓名'“添加”)reluLayer('姓名'“reluCombined”)完全连接层(10,'姓名'“fc”)softmaxLayer('姓名'“sm”)];layersBranch2 = [convolution2dLayer(1,numFilters,'姓名''convBranch2')组规范化层(所有渠道的'姓名''gnBranch2')];lgraph = layerGraph(layersBranch1);lgraph = addLayers(lgraph,layersBranch2);lgraph = connectLayers(lgraph,'gnBranch2'“添加/in2”);

创建dlnetwork。由于此网络包含未连接的输入,请创建未初始化的dlnetwork通过设置“初始化”名称选择错误的

dlnet = dlnetwork(lgraph,“初始化”,假);

创建示例网络输入,其大小和格式与该网络的典型输入相同。对于这两种输入,使用32的批大小。使用尺寸为64 × 64的输入,有三个通道作为层的输入'输入'.使用大小为64×64的输入,带有18个通道,用于层的输入'convBranch2'

exampleInput = dlarray(RAND([inputSize 32]),“SSCB”); 例如convBranch2=dlarray(rand([32 18 32]),“SSCB”);

检查网络属性,以确定提供示例输入的顺序。

dlnet.Layers
ANS = 12×1层阵列层:1 '输入' 图像输入64×64×3倍的图像2 'conv1Branch1' 卷积144个3×3与步幅[2 2]和填补 '相同的' 3 'gn1Branch1' 组标准化组卷积归一化4“relu1Branch1” RELU RELU 5“conv2Branch1”卷积24个3×3与步幅[1 1]和填充“相同” 6“gn2Branch1”组标准化组归一化7“添加”添加逐元素添加2个输入8'卷积reluCombined” RELU RELU 9 'FC' 完全连接10完全连接层10 'SM' 使用SoftMax SOFTMAX 11 'convBranch2' 卷积24分1×1的卷积与步幅[1 1]和填充[0 0 0 0] 12 'gnBranch2' 组规范化集团正常化

分析了网络。控件中需要输入的层的顺序相同,提供示例输入财产的dlnetwork。必须为所有网络输入提供示例输入,包括连接到输入层的输入。

analyzeNetwork(dlnet,exampleInput,exampleConvBranch2)

输入参数

全部收缩

训练有素的网络,指定为SeriesNetwork或者达格网络对象。您可以通过导入预训练的网络(例如,通过使用获得的培训网络googlenet功能)或使用训练自己的网络Trainnetwork.

网络层,指定为数组或LayerGraph对象。

有关内置层的列表,请参见深度学习层列表

网络自定义训练循环,指定为dlnetwork对象。

目标的工作流程,指定为以下情况之一:

  • 'trainNetwork'- 分析层图形,用于与使用Trainnetwork.功能。例如,该功能检查该层的图具有一个输出层和没有断开的层输出。

  • 'dlnetwork'- 分析层图形与使用dlnetwork对象。例如,该函数检查层图是否没有任何输出层。

例如网络输入,指定为格式化dlarray软件通过网络传播示例输入,以确定层激活、可学习参数和状态参数的数量和大小。

当你要分析的是具有未连接到输入层输入网络使用例如输入。

在其中您必须指定例如输入的顺序取决于您所分析的网络类型:

  • 数组—提供示例输入,其顺序与需要输入的层在大批。

  • LayerGraph-以要求输入的层出现的相同顺序提供示例输入财产的LayerGraph

  • dlnetwork—按照列表中列出的输入顺序提供示例输入InputNames财产的dlnetwork

如果一个层有多个未连接的输入,那么该层的示例输入必须按照它们在该层中出现的顺序分别指定InputNames财产。

必须为网络的每个输入指定一个示例输入,即使该输入连接到输入层。

介绍了在R2018a