主要内容

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卷积神经网络。

网= googlenet;

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

analyzeNetwork(净)

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

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

  • S -空间

  • C -通道

  • B -批量观测

  • T -时间或顺序

  • U -未指明的

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

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

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

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

layers = [imageInputLayer([32 32 3]) convolution2dLayer(5,16,Padding= .“相同”) reluLayer (Name =“relu_1”) convolution2dLayer(3、16、填充=“相同”步= 2)reluLayer additionLayer (Name =“add_1”) convolution2dLayer(3、16、填充=“相同”步= 2)reluLayer additionLayer(3名=“add_2”) fullyConnectedLayer(10) softmaxLayer classificationLayer];lgraph = layerGraph(层);

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

层= convolution2dLayer(1、16步= 2,Name =“conv_skip”);lgraph = addLayers (lgraph层);lgraph = connectLayers (lgraph,“relu_1”“add_1 / in2”);lgraph = connectLayers (lgraph,“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时,该层在前两个维度(空间维度)中对激活进行2倍的下采样。来调整输入的大小relu2层,使其与输入的大小相同relu_1,通过删除的价值conv_2层。

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

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

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

analyzeNetwork (lgraph)

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

layers = [imageInputLayer([28 28 1],归一化= .“没有”) convolution2dLayer(5、20、填充=“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,20,Padding= .“相同”) batchNormalizationLayer reluLayer convolution2dLayer(3,20,Padding= .“相同”) 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 convolution2dLayer (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 (lgraph,“gn_branch”“添加/ in2”);

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

网= dlnetwork (lgraph,初始化= false);

查看网络输入名称。

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

创建与该网络的典型输入相同大小和格式的示例网络输入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)

输入参数

全部折叠

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

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

深度学习网络,具体为SeriesNetworkDAGNetwork,或dlnetwork对象。

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

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

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

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

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

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

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

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

  • dlnetwork-提供输入示例的顺序与目录中列出的顺序相同InputNames财产的dlnetwork

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

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

版本历史

介绍了R2018a

Baidu
map