主要内容

analyzeNetwork

分析深度学习网络架构

描述

使用analyzeNetwork为了可视化和理解网络的体系结构,请检查您是否正确定义了体系结构,并在培训之前发现问题。的问题,analyzeNetwork检测包括丢失或未连接的层,错误大小的层输入,错误数量的层输入和无效的图形结构。

提示

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

例子

analyzeNetwork (通过层数组或层图对网络层进行分析并且还可以检测错误和问题trainNetwork工作流。该功能显示网络体系结构的交互式可视化,并提供有关网络层的详细信息。层信息包括层类型,层激活的大小和格式,以及可学习参数和状态参数的大小和数量。

每个激活维度都有以下标签之一:年代(空间),C(通道),B(批处理),T(时间或顺序),或U(不明)。

例子

analyzeNetwork (TargetUsage =目标通过层数组或层图对网络层进行分析用于指定的目标工作流。在分析层时使用此语法dlnetwork工作流。

analyzeNetwork (X1,…,XnTargetUsage =“dlnetwork”)分析层数组或层图使用示例网络输入X1,…,Xn.该软件通过网络传播示例输入,以确定层激活的大小和格式,可学习参数和状态参数的大小和数量,以及可学习参数的总数。使用此语法可以分析具有一个或多个未连接到输入层的输入的网络。

例子

analyzeNetwork (分析了SeriesNetworkDAGNetwork,或dlnetwork对象

例子

analyzeNetwork (X1,…,Xn分析了dlnetwork对象使用示例网络输入X1,…,Xn.该软件通过网络传播示例输入,以确定层激活的大小和格式,可学习参数和状态参数的大小和数量,以及可学习参数的总数。使用此语法分析未初始化的dlnetwork它具有一个或多个未连接到输入层的输入。

例子

全部折叠

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

Net = googlenet;

分析网络。analyzeNetwork显示网络体系结构的交互式图形和包含有关网络层信息的表。

analyzeNetwork(净)

使用左边的图来研究网络架构。在图中选择一个图层。选中的图层在图和图层表中高亮显示。

在表格中,查看层属性、层类型、层激活大小和可学习参数等层信息。一个层的激活是该层的输出。每个激活维度都有以下标签之一:

  • S -空间

  • C -通道

  • B -批量观察

  • T -时间或顺序

  • U -未指明

查看维度标签以了解数据如何通过网络传播,以及各层如何修改激活的大小和布局。

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

深度学习网络分析仪显示网络中可学习参数的总数,精确到一位小数点后。要查看可学习参数的确切数量,请暂停总可学的.要显示每个层中可学习参数的数量,单击层表右上角的箭头并选择可学习的数量.要按列值对层表进行排序,请将鼠标悬停在列标题上并单击出现的箭头。例如,您可以根据可学习参数的数量对层进行排序,从而确定哪一层包含的参数最多。

创建一个简单的带有跳跃连接的卷积网络。创建一个包含网络主要分支的层数组。

图层= [imageInputLayer([32 32 3])卷积2dlayer(5,16,填充=“相同”) reluLayer (Name =“relu_1”) convolution2dLayer(3、16、填充=“相同”,Stride=2) reluLayer additionLayer(2,Name=“add_1”) convolution2dLayer(3、16、填充=“相同”,Stride=2) reluLayer additionLayer(3,Name=“add_2”) fullyConnectedLayer(10) softmaxLayer classificationLayer];lgraph = layerGraph(图层);

将层数组转换为层图并添加跳过连接。其中一个跳过连接包含单个1 × 1卷积层conv_skip

layer = convolution2dLayer(1,16,Stride=2,Name=“conv_skip”);lgraph = addLayers(lgraph,layer);lgraph = connectLayers(“relu_1”“add_1 / in2”);lgraph = connectLayers(“add_1”“add_2 / in2”);

分析网络结构analyzeNetwork函数。该函数发现网络中三个层的问题。

analyzeNetwork (lgraph)

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

  • conv_skip没有连接到网络的其他部分。它应该是连接部分之间的快捷方式add_1而且add_2层。要修复此错误,请连接add_1conv_skip而且conv_skipadd_2

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

  • 附加层的所有输入必须具有相同的大小,但是add_1图层有两个不同大小的输入。因为conv_2图层有一个值为2时,该层在前两个维度(空间维度)中对激活进行了两倍的下调采样。来调整输入的大小relu2层,使它与输入的大小相同relu_1,通过移除的值conv_2层。

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

图层= [imageInputLayer([32 32 3])卷积2dlayer(5,16,填充=“相同”) reluLayer (Name =“relu_1”) convolution2dLayer(3、16、填充=“相同”) reluLayer additionLayer(2,Name=“add_1”) convolution2dLayer(3、16、填充=“相同”,Stride=2) reluLayer additionLayer(2,Name=“add_2”) fullyConnectedLayer(10) softmaxLayer classificationLayer];lgraph = layerGraph(图层);layer = convolution2dLayer(1,16,Stride=2,Name=“conv_skip”);lgraph = addLayers(lgraph,layer);lgraph = connectLayers(“relu_1”“add_1 / in2”);lgraph = connectLayers(“add_1”“conv_skip”);lgraph = connectLayers(“conv_skip”“add_2 / in2”);

分析新架构。新的网络不包含任何错误,可以进行训练。

analyzeNetwork (lgraph)

创建一个自定义训练循环的层数组。对于自定义训练循环工作流,网络不能有输出层。

layers = [imageInputLayer([28 28 1],归一化=“没有”) convolution2dLayer(5、20、填充=“相同”) batchNormalizationLayer relullayer卷积2dlayer(3,20,填充=“相同”) batchNormalizationLayer relullayer卷积2dlayer(3,20,填充=“相同”) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer];

方法分析层数组analyzeNetwork函数,并设置TargetUsage选项“dlnetwork”

analyzeNetwork(层,TargetUsage =“dlnetwork”

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

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

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

numFilters = 24;inputSize = [64 64 3];layersBranch1 = [convolution2dLayer(3,6*numFilters,Padding= .“相同”步= 2)groupNormalizationLayer (“所有渠道”) reluLayer卷积2dlayer (3,numFilters,填充=“相同”) groupNormalizationLayer (“channel-wise”) additionLayer (Name =“添加”reluLayer fullyConnectedLayer(10) softmaxLayer];layersBranch2 = [convolution2dLayer(1,numFilters,Name= .“conv_branch”) groupNormalizationLayer (“所有渠道”、名称=“gn_branch”));lgraph = layerGraph(layersBranch1);lgraph = addLayers(lgraph,layersBranch2);lgraph = connectLayers(“gn_branch”“添加/ in2”);

创建dlnetwork.因为这个网络包含一个未连接的输入,所以创建一个未初始化的dlnetwork对象,通过设置初始化选项

net = dlnetwork(lgraph,Initialize=false);

查看网络输入名称。

网InputNames
ans =1×2细胞{' conv_1} {' conv_branch '}

使用random为该网络创建与典型输入相同大小和格式的示例网络输入dlarray对象。对于这两个输入,使用32的批处理大小。使用大小为64 * 64的输入,其中有三个通道用于该层的输入“输入”.使用大小为64 * 64的输入,有18个通道作为该层的输入。conv_branch”

X1 = dlarray(rand([inputSize 32]),“SSCB”);X2 = dlarray(rand([32 32 18 32]),“SSCB”);

分析网络。的顺序提供示例输入InputNames的属性dlnetwork.您必须为所有网络输入提供一个示例输入,包括连接到输入层的输入。

analyzeNetwork(净(X1, X2)

输入参数

全部折叠

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

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

深度学习网络,指定为SeriesNetworkDAGNetwork,或dlnetwork对象。

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

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

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

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

当您想要分析没有任何输入层或输入未连接到输入层的网络时,请使用示例输入。

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

  • 数组中需要输入的层以相同的顺序提供示例输入数组中。

  • LayerGraph中需要输入的层以相同的顺序提供示例输入的属性LayerGraph

  • dlnetwork—输入样例的顺序与InputNames的属性dlnetwork

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

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

版本历史

在R2018a中引入