主要内容

分析网络

分析深度学习网络架构

描述

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

提示

交互式地可视化、分析和训练一个网络,使用deepNetworkDesigner(净).有关更多信息,请参见深度网络设计器

训练有素的网络

例子

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

网络层

例子

analyzeNetwork (分析中指定的网络层也可以检测错误和问题trainNetwork工作流。可以是数组或一个LayerGraph反对。该功能显示网络体系结构的交互式可视化,并提供有关网络层的详细信息。层信息包括层激活的数量和大小、可学习参数和状态参数。

例子

analyzeNetwork (,“TargetUsage”,目标分析中指定的网络层用于指定的目标工作流。在分析a时使用此语法数组或层图数据链路网络工作流。

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

数据链路网络对象

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

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

例子

全部折叠

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

净=googlenet
net=DAG网络,具有以下属性:层:[144×1 nnet.cnn.layer.layer]连接:[170×2表]输入名称:{'data'}输出名称:{'output'}

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

使用左边的情节研究网络架构。在图中选择一个图层。选中的图层在绘图和图层表中突出显示。

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

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

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

analyzeNetwork(净)

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

层=[imageInputLayer([32 3])卷积层(5,16,“填充”“相同”) reluLayer (“名字”“relu_1”) convolution2dLayer(3, 16岁,“填充”“相同”“步”,2)reluLayer附加层(2,“名字”“add1”) convolution2dLayer(3, 16岁,“填充”“相同”“步”,2)reluLayer附加层(3,“名字”“add2”)fullyConnectedLayer(10)softmaxLayer classificationLayer];lgraph=layerGraph(层);

创建快捷连接。其中一个快捷连接包含一个1乘1的卷积层skipConv

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)

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

  • skipConv层没有连接到网络的其余部分。它应该是快捷连接的一部分地址1地址2层。要修复此错误,请连接地址1skipConvskipConv地址2

  • 地址2层指定有三个输入,但层只有两个输入。若要修复错误,请将输入数指定为2

  • 添加层的所有输入必须具有相同的大小,但地址1层有两个不同大小的输入。因为conv_2图层有一个“步”值为2时,该层将在前两个维度(空间维度)中对激活进行因子2的采样。来调整输入的大小relu2层,使其具有与输入相同的大小relu1,通过设置下采样来去除下采样“步”的价值conv_2层为1。

将这些修改应用到这个例子开始的层图构造中,并创建一个新的层图。

层=[imageInputLayer([32 3])卷积层(5,16,“填充”“相同”) reluLayer (“名字”“relu_1”) convolution2dLayer(3, 16岁,“填充”“相同”“步”1) reluLayer additionLayer (2“名字”“add1”) convolution2dLayer(3, 16岁,“填充”“相同”“步”,2)reluLayer附加层(2,“名字”“add2”)fullyConnectedLayer(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”);

分析新的架构。新的网络不包含任何错误,可以随时接受训练。

analyzeNetwork (lgraph)

创建一个自定义训练循环的层图。对于自定义训练循环工作流,层图必须没有输出层。

层=[imageInputLayer([28 1],“正常化”“没有”“名字”“输入”20岁的)convolution2dLayer (5“名字”“conv1”)批处理规范化层(“名字”“bn1”) reluLayer (“名字”“relu1”20岁的)convolution2dLayer (3“填充”,1,“名字”“conv2”)批处理规范化层(“名字”“bn2”) reluLayer (“名字”“relu2”)卷积层(3,20,“填充”, 1“名字”“conv3”)批处理规范化层(“名字”“bn3”) reluLayer (“名字”“relu3”) fullyConnectedLayer (10“名字”“俱乐部”) softmaxLayer (“名字”“softmax”));lgraph = layerGraph(层);

使用分析网络函数,并设置“TargetUsage”选择“dlnetwork”

analyzeNetwork (lgraph“TargetUsage”“dlnetwork”

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

要分析一个具有未连接到输入层的输入的网络,您可以提供示例网络输入到分析网络函数。您可以在分析时提供示例输入数据链路网络对象,或者当你分析时数组或LayerGraph使用“TargetUsage”、“dlnetwork”名称-值的选择。

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

numFilters = 24;inputSize = [64 64 3];layerbranch1 = [imageInputLayer(inputSize,“正常化”“没有”“名字”“输入”)卷积2层(3,6*numFilters,“填充”“相同”“步”,2,“名字”“conv1Branch1”) groupNormalizationLayer (“所有频道”“名字”“gn1Branch1”) reluLayer (“名字”“relu1Branch1”) convolution2dLayer (3 numFilters“填充”“相同”“名字”“conv2Branch1”) groupNormalizationLayer (“channel-wise”“名字”“gn2Branch1”) additionLayer (2“名字”“添加”) reluLayer (“名字”“重新组合”) fullyConnectedLayer (10“名字”“俱乐部”) softmaxLayer (“名字”“sm”));layersBranch2 =[卷积2dlayer (1,numFilters,“名字”“convBranch2”) groupNormalizationLayer (“所有频道”“名字”“gnBranch2”));lgraph = layerGraph (layersBranch1);lgraph = addLayers (lgraph layersBranch2);lgraph = connectLayers (lgraph,“gnBranch2”“添加/ in2”);

创建数据链路网络.因为这个网络包含一个未连接的输入,所以创建一个未初始化的数据链路网络对象的“初始化”将值选项命名为

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

创建与此网络的典型输入相同大小和格式的示例网络输入。对于这两个输入,使用32的批处理大小。使用64×64的输入和三个通道作为层的输入“输入”.使用尺寸为64 × 64的输入,18个通道作为层的输入“convBranch2”

exampleInput = dlarray(rand([inputSize 32])),“SSCB”);exampleeconvbranch2 = dlarray(rand([32 32 18 32])),“SSCB”);

检查属性来确定提供示例输入的顺序。

dlnet。层
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组归一化

分析网络。提供示例输入,其顺序与需要输入的层出现在列表中的顺序相同财产数据链路网络.您必须为所有网络输入提供示例输入,包括连接到输入层的输入。

analyzeNetwork (dlnet exampleInput exampleConvBranch2)

输入参数

全部折叠

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

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

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

网络自定义训练循环,指定为数据链路网络对象。

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

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

  • “dlnetwork”-分析层图的使用数据链路网络例如,该函数检查图层图是否没有任何输出图层。

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

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

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

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

  • LayerGraph-提供示例输入,其顺序与需要输入的图层显示在中的顺序相同财产LayerGraph

  • 数据链路网络-按照中列出的输入顺序提供示例输入InputNames财产数据链路网络

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

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

介绍了R2018a