主要内容

分析

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

描述

使用分析要可视化并理解网络的体系结构,请检查您已经正确定义了体系结构,并在培训之前检测问题。的问题,分析检测包括丢失或未连接的图层、大小不正确的图层输入、数量不正确的图层输入以及无效的图形结构。

提示

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

训练有素的网络

例子

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

网络层

例子

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

例子

分析网络(,'targetusage',目标分析中指定的网络层用于指定的目标工作流。分析工作流时使用此语法的数组或层图dlnetwork.工作流。

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

dlnetwork.对象

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

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

例子

全部折叠

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

net = googlenet.
net =具有属性的Dagnetwork:图层:[144×1 nnet.cnn.layer.layer]连接:[170×2表] InputNames:{'data'} OutputNames:{'输出'}

分析网络。分析显示网络架构的交互图和包含有关网络层信息的表。

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

在该表中,可以查看层属性、层类型、层激活的大小和可学习参数等层信息。一层的激活就是该层的输出。

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

通过单击图层表的右上角的箭头显示每层学习参数的总数,然后选择学术总量.要按列值对图层表进行排序,请将鼠标悬停在列标题上,然后单击出现的箭头。例如,您可以通过从学习参数的总数进行排序,确定哪些图层包含最多参数。

分析网络(net)

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

图层= [imageInputlayer([32 32 3])卷积2dlayer(5,16,'填充'“一样”) reluLayer (“名字”“relu_1”)卷积2层(3,16,'填充'“一样”“步”,2)剥离附加层(2,“名字”“add1”)卷积2层(3,16,'填充'“一样”“步”,2)剥离附加层(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”);

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

分析网络(lgraph)

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

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

  • Add2.将图层指定为具有三个输入,但图层只有两个输入。要修复错误,请指定输入的数量2

  • 所有输入到加法层必须具有相同的大小,但是Add1.层有两个大小不同的输入Conv_2.层有一个“步”值为2时,该层在前两个维度(空间维度)中以2的因子对激活进行下采样relu2.层,使其具有与输入相同的大小relu1.,通过设置“步”的价值Conv_2.层到1。

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

图层= [imageInputlayer([32 32 3])卷积2dlayer(5,16,'填充'“一样”) reluLayer (“名字”“relu_1”)卷积2层(3,16,'填充'“一样”“步”,1)reluLayer附加层(2,“名字”“add1”)卷积2层(3,16,'填充'“一样”“步”,2)剥离附加层(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 1],'正常化'“没有”“名字”“输入”20岁的)convolution2dLayer (5“名字”“conv1”batchnormalizationlayer(“名字”“bn1”) reluLayer (“名字”'relu1')卷积2dlayer(3,20,'填充',1,“名字”“conv2”batchnormalizationlayer(“名字”“bn2”) reluLayer (“名字”“relu2”)卷积2dlayer(3,20,'填充'1.“名字”“conv3”batchnormalizationlayer(“名字”“bn3”) reluLayer (“名字”“relu3”)完全连接层(10,“名字”“fc”) softmaxLayer (“名字”“softmax”)]; lgraph=层图(层);

使用该层图分析图层图分析函数并设置'targetusage'选择“dlnetwork”

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

在这里,该函数未报告图层图的任何问题。

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

定义网络架构。用两个分支构造一个网络。网络需要两个输入,每个分支输入一个输入。使用加法层连接分支。

numFilters=24;inputSize=[64 64 3];LayerBranch1=[imageInputLayer(inputSize,'正常化'“没有”“名字”“输入”)卷积2dlayer(3,6 * numfilters,'填充'“一样”“步”2,“名字”“conv1Branch1”)组规范化层('全频道'“名字”“gn1Branch1”) reluLayer (“名字”“relu1Branch1”) convolution2dLayer (3 numFilters'填充'“一样”“名字”'conv2branch1')组规范化层(“channel-wise”“名字”“gn2Branch1”)附加层(2,“名字”“添加”) reluLayer (“名字”'RECUCOMOMBONED')完全连接层(10,“名字”“fc”) softmaxLayer (“名字”“sm”));layersBranch2 =[卷积2dlayer (1,numFilters,“名字”“convBranch2”)组规范化层('全频道'“名字”“gnBranch2”));lgraph = layerGraph (layersBranch1);lgraph = addLayers (lgraph layersBranch2);lgraph = connectLayers (lgraph,“gnBranch2”“添加/in2”);

创造dlnetwork.。由于此网络包含未连接的输入,请创建未初始化的dlnetwork.通过设置'初始化'名称值选项

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

创建示例网络输入与此网络的典型输入相同的大小和格式。对于两个输入,使用批量大小为32.使用带有三个通道的大小64乘6的输入,用于输入到图层“输入”.使用大小为64×64的输入,带有18个通道,用于层的输入“convBranch2”

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

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

dlnet.Layers
ans = 12×1 Layer array with layers:1的输入图像输入64×64×3图片2的conv1Branch1卷积144 3×3旋转步(2 - 2)和填充“相同”3“gn1Branch1”集团标准化规范化4的relu1Branch1 ReLU ReLU 5‘conv2Branch1卷积24 3×3的隆起与步幅[1]和填充“相同”6“gn2Branch1”集团标准化规范化7'add' add Element-wise add of 2 input 8 'reluCombined' ReLU ReLU 9 'fc' Fully Connected 10 Fully Connected layer 10 'sm' Softmax Softmax 11 'convBranch2' Convolution 24 1×1 convolutions with stride [1 1] and padding [0 0 0] 12 'gnBranch2' Group Normalization组归一化

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

analyzeNetwork (dlnet exampleInput exampleConvBranch2)

输入参数

全部折叠

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

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

有关内置图层列表,请参阅深度学习层列表

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

目标工作流,指定为以下其中之一:

  • “trainNetwork”-分析层图使用trainNetwork函数。例如,该函数检查层图是否有一个输出层和没有断开的层输出。

  • “dlnetwork”-分析层图的使用dlnetwork.对象。例如,该功能检查图层图没有任何输出层。

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

当您想要分析一个具有与输入层无关的输入的网络时,请使用示例输入。

你必须指定示例输入的顺序取决于你要分析的网络类型:

  • 数组-按照需要输入的层在列表中出现的相同顺序提供示例输入数组中。

  • LayerGraph- 以与需要输入的层相同的顺序提供示例输入财产的财产LayerGraph

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

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

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

介绍了R2018a