Main Content

layerGraph

(不推荐)深度学习的网络层图

不推荐使用 LayerGraph 对象。请改用 dlnetwork 对象。有关详细信息,请参阅版本历史记录

说明

层图将神经网络的架构指定为深度学习层的有向无环图 (DAG)。这些层可以有多个输入和多个输出。

创建对象

描述

示例

lgraph = layerGraph 创建一个不包含任何层的空层图。您可以使用 addLayers 函数向空图添加层。

lgraph = layerGraph(layers) 基于网络层数组创建层图,并设置 Layers 属性。lgraph 中的层以与 layers 中相同的顺序连接。

lgraph = layerGraph(net) 提取 SeriesNetworkDAGNetworkdlnetwork 对象的层图。例如,您可以提取预训练网络的层图来执行迁移学习。

输入参量

全部展开

深度学习网络,指定为 SeriesNetworkDAGNetworkdlnetwork 对象。

属性

全部展开

此 属性 为只读。

网络层,指定为 Layer 数组。

此 属性 为只读。

层连接,指定为具有两列的表。

每个表行表示层图中的一个连接。第一列 Source 指定每个连接的源。第二列 Destination 指定每个连接的目标。连接的源和目标或者是层名称,或者具有形式 "layerName/IOName",其中 "IOName" 是层输入或输出的名称。

数据类型: table

此 属性 为只读。

输入层的名称,指定为字符向量元胞数组。

数据类型: cell

此 属性 为只读。

输出层的名称,指定为字符向量元胞数组。

数据类型: cell

对象函数

addLayersAdd layers to neural network
removeLayersRemove layers from neural network
replaceLayerReplace layer in neural network
connectLayersConnect layers in neural network
disconnectLayersDisconnect layers in neural network
plot绘制神经网络架构

示例

全部折叠

为深度学习创建一个简单的层图。

此示例中的简单网络包括:

  • 一个具有顺序连接的层的主分支。

  • 一个包含单个 1×1 卷积层的快捷方式连接。快捷方式连接使参数梯度可以更轻松地从输出层流到较浅的网络层。

将网络的主分支创建为层数组。相加层按元素对多个输入求和。指定要求和的相加层的输入数目。为了便于以后添加连接,请为第一个 ReLU 层和相加层指定名称。

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(5,16,'Padding','same')
    batchNormalizationLayer
    reluLayer('Name','relu_1')
    
    convolution2dLayer(3,32,'Padding','same','Stride',2)
    batchNormalizationLayer
    reluLayer
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer
    
    additionLayer(2,'Name','add')
    
    averagePooling2dLayer(2,'Stride',2)
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

根据层数组创建一个层图。layerGraph 按顺序连接 layers 中的所有层。绘制层图。

lgraph = layerGraph(layers);
figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

创建一个 1×1 卷积层,并将其添加到层图中。指定卷积滤波器的数量和步幅,使激活大小与第三个 ReLU 层的激活大小匹配。这种排列使得相加层能够将第三个 ReLU 层和 1×1 卷积层的输出相加。要检查层是否在图中,请绘制层图。

skipConv = convolution2dLayer(1,32,'Stride',2,'Name','skipConv');
lgraph = addLayers(lgraph,skipConv);
figure
plot(lgraph)

Figure contains an axes object. The axes object contains an object of type graphplot.

创建从 'relu_1' 层到 'add' 层的快捷方式连接。由于您在创建相加层时将输入数目指定为 2,因此该层有两个输入,名为 'in1''in2'。第三个 ReLU 层已连接到 'in1' 输入。将 'relu_1' 层连接到 'skipConv' 层,并将 'skipConv' 层连接到 'add' 层的 'in2' 输入。相加层现在对第三个 ReLU 层和 'skipConv' 层的输出求和。要检查层是否正确连接,请绘制层图。

lgraph = connectLayers(lgraph,'relu_1','skipConv');
lgraph = connectLayers(lgraph,'skipConv','add/in2');
figure
plot(lgraph);

Figure contains an axes object. The axes object contains an object of type graphplot.

限制

  • 层图对象不包含量化信息。通过从量化网络中提取层图,然后使用 assembleNetworkdlnetwork 重新组合网络,可从网络中删除量化信息。

版本历史记录

在 R2017b 中推出

全部折叠

R2024a: 不推荐

从 R2024a 开始,不推荐使用 LayerGraph 对象,请改用 dlnetwork 对象。

目前没有停止支持 LayerGraph 对象的计划。但是,推荐改用 dlnetwork 对象,此类对象具有以下优势:

  • dlnetwork 对象是一种统一的数据类型,支持网络构建、预测、内置训练、可视化、压缩、验证和自定义训练循环。

  • dlnetwork 对象支持更广泛的网络架构,您可以创建或从外部平台导入这些网络架构。

  • trainnet 函数支持 dlnetwork 对象,这使您能够轻松指定损失函数。您可以从内置损失函数中进行选择或指定自定义损失函数。

  • 使用 dlnetwork 对象进行训练和预测通常比使用 LayerGraphtrainNetwork 工作流更快。

大多数支持 LayerGraph 对象的函数也支持 dlnetwork 对象。下表显示了 LayerGraph 对象的一些典型用法,以及如何更新您的代码以改用 dlnetwork 对象函数。

不推荐推荐
lgraph = layerGraph;net = dlnetwork;
lgraph = layerGraph(layers);net = dlnetwork(layers,Initialize=false);
lgraph = layerGraph(net);net = dag2dlnetwork(net);
lgraph = addLayers(lgraph,layers);net = addLayers(net,layers);
lgraph = removeLayers(lgraph,layerNames);net = removeLayers(net,layerNames);
lgraph = replaceLayer(lgraph,layerName,layers);net = replaceLayer(net,layerName,layers);
lgraph = connectLayers(lgraph,s,d);net = connectLayers(net,s,d);
lgraph = disconnectLayers(lgraph,s,d);net = disconnectLayers(net,s,d);
plot(lgraph);plot(net);

要训练指定为 dlnetwork 对象的神经网络,请使用 trainnet 函数。

LayerGraph 对象中,不使用输出层,而是使用 trainnet 函数的损失函数参量指定损失函数。