NetGraph

NetGraph[{layer1,layer2,},{m1n1,m2n2,}]

指定由 mi 层的输出作为 ni 层的输入的图定义的神经网络.

NetGraph["name1"layer1,"name2"layer2,,{"namem1""namen1",}]

指定带有明确命名层的网络.

NetGraph[layer]

将网络层或 NetChain 转换为等价的最小 NetGraph.

更多信息和选项

  • NetGraph 通常用于将神经网络操作与多个输入或输出组合在一起,用于残差连接、串接、注意力等操作. 结果是一个有向无环图.
  • 可以通过指定 NetPort["input"]NetPort["output"] 创建连接列表中整个 NetGraph 的输入或输出端口.
  • 图中连接的线性链可以指定为 layer1layer2layern,它会导致每个 layeri 连接至 layeri+1.
  • 如果第 n 层或名称为 "layer" 层具有多个输入端口或多个输出端口,可以通过给出 NetPort[n,"port"]NetPort["layer","port"] 消除歧义.
  • 如果层具有接收多个输入的端口,例如,CatenateLayerThreadingLayer,则可以通过写 ,m1n,,m2n, 同时构建多个连接,其等同于 ,m1n,,m2n,. 输入 mi 总是按 m1,m2, 的顺序传给 n.
  • 如果任何层的一个或多个输入或输出端口未连接,那它们会成为整个 NetGraph 的端口.
  • 如果几个网络层的多个输出端口未连接并且共享相同的名称 "Output",它们将变成整个 NetGraph 的独立端口,名称分别为 "Output1""Output2" 等.
  • 通过给出 NetPort[layer,"port"]None 可将某些输出端口屏蔽.
  • 通过指定数组的形状,用选项 "port"shape 可设置端口的 NetEncoderNetDecoder,其中 shape 可为以下形式:
  • "Real"单个实数
    "Integer"单个整数
    Restricted["Integer",n]1 和 n 之间的整数
    Restricted["Integer",{m,n}]位于 mn 之间的整数
    n长度为 n 的向量
    {n1,n2,}维度为 n1×n2× 的数组
    "Varying"长度是变量的向量
    {"Varying",n2,n3,}第一维度是变量,其余维度是 n2×n3× 的数组
    NetEncoder[](用于输入口)的加码器
    NetEncoder[{,"Dimensions"{n1,}}]映射于维度为 n1× 数组的编码器
    NetDecoder[](用于输出口)的解码器
    NetDecoder[{,"InputDepth"n}}]应用于阶数为 n 的数组的解码器
    FeatureExtractorFunction[]特征提取函数
  • NetGraph 在第一个参数的列表中支持以下特殊网络层指定:
  • Ramp,LogisticSigmoid,ElementwiseLayer[f]
    Plus,Times,Divide,ThreadingLayer[f]
    nLinearLayer[n]
    {layer1,layer2,}NetChain[{layer1,layer2,}]
  • 可包括以下训练参数:
  • LearningRateMultipliersAutomatic网络中可训练数组的学习率乘子
  • 对于带有单个输入口的网络,NetGraph[][data] 给出把网络应用于 data 的结果.
  • 对于带有多个输入口的网络,NetGraph[][<|port1data1,|>] 为每个口提供数据.
  • 对于只有一个输出端口的网络,NetGraph[][data] 给出该端口的输出. 如果含有属性 propNetDecoder 被添加到输出,NetGraph[][data,prop] 会计算该属性.
  • NetGraph[][data,"Properties"] 可用来获取可能属性的列表.
  • 对于有多个输出端口的网络,NetGraph[][data] 给出所有端口的输出的关联. NetGraph[][data,NetPort["oport"]] 给出名为 "oport" 的输出端口的输出.
    如果含有属性 propNetDecoder 被添加到该输出,NetGraph[][data,NetPort["oport"]prop] 会计算该端口的属性.
  • NetGraph[][data,NetPort["oport"]"Properties"] 可用来获取给定端口的可能属性列表.
  • NetGraph[][data,NetPortGradient["port"]] 给出输出相对于输入端口 "port" 的值的梯度.
  • NetGraph[][data,NetPortGradient[{layer1,,"array"}]] 给出输出相对于嵌套网络层数组的梯度.
  • NetGraph[][data,NetPortGradient[All]] 给出所有梯度的关联.
  • NetGraph[][data,{spec1,spec2,}] 给出所有指定的输出关联. 每个指定 speci 可以是 NetPort 设置、 对 NetDecoder 属性的指代或是 NetPortGradient.
  • NetGraph[][data,opts] 指定对 data 应用网络时应使用的选项. 可能的选项包括:
  • BatchSizeAutomatic对于输入列表,一次计算的输入数目
    NetEvaluationMode"Test"评估时使用什么模式
    RandomSeedingAutomatic如果有伪随机生成器,如何播种
    TargetDevice"CPU"在哪个目标设备上进行评估
    WorkingPrecision"Real32"用于计算网络的数值精度
  • WorkingPrecision 的可能设置包括:
  • "Real32"使用单精度实数 (32-bit)
    "Real64"使用双精度实数 (64-bit)
    "Mixed"对于某些运算使用半精度实数
  • WorkingPrecision"Mixed" 只支持 TargetDevice"GPU",在某些设备上会导致显著的性能增加.
  • NumericArray 作为输入时,输出将是 NumericArray. 在这种情况下,其数值类型来自于 WorkingPrecision.
  • 当设置为 NetEvaluationMode"Training" 时,如 DropoutLayer 这样的层会显示出训练而不是普通的评估一样的行为.
  • NetGraphStandardForm 显示了图中层的连通性,并用边所表示的数组的维度来标注边. 单击图中的层可显示有关该层的更多信息.
  • Normal[NetGraph[]] 返回用于构建网络图的网络层的列表或关联. EdgeList[NetGraph[]] 返回网络图中的连接的列表.
  • NetGraph[][[spec]] 从网络中提取由 spec 指定的层.
  • 可通过 NetReplacePartNetReplaceNetRenameNetFlattenNetDeleteNetTakeNetGraph[] 网络进行转换.
  • Options[NetGraph] 给出构建网络的默认选项的列表. Options[NetGraph[]] 给出在一些数据上运行网络的默认选项列表.
  • Information[NetGraph[]] 给出关于该网络的报告.
  • Information[NetGraph[],prop] 给出 NetGraph[] 的属性 prop 的值. 可能的属性包括:
  • "Arrays"给出网络中每个数组的关联
    "ArraysByteCounts"给出每个数组的字节数的关联
    "ArraysCount"所有网络层中数组的总量
    "ArraysDimensions"给出每个数组的维数的关联
    "ArraysElementCounts"给出每个数组中元素的数量的关联
    "ArraysLearningRateMultipliers"给出每个数组的默认学习率乘子的关联
    "ArraysPositionList"NetExtractNetReplacePartLearningRateMultipliers 的数组的位置指定
    "ArraysSizes"给出每个数组的大小的关联
    "ArraysTotalByteCount"所有网络层中所有数组的总字节数
    "ArraysTotalElementCount"所有数组中的元素的总数
    "ArraysTotalSize"所有网络层中所有数组的总的大小
    "FullSummaryGraphic"表示网络中所有深度的网络层的连接关系的示意图
    "InputForm"重建网络的表达式
    "InputPortNames"输入端口的名称的列表
    "InputPorts"输入端口的形状的关联
    "Layers"给出网络中每个网络层的关联
    "LayersCount"网络层的总数
    "LayersGraph"表示网络层连通性的图
    "LayersList"所有网络层的列表
    "LayerTypeCounts"网络中每种类型的层出现多少次
    "MXNetNodeGraph"底层 "MXNet" 运算的原始图
    "MXNetNodeGraphPlot""MXNet" 运算的含有注释的图
    "OutputPortNames"输出端口的名称的列表
    "OutputPorts"输出端口的形状的关联
    "Properties"可用的属性
    "RecurrentStatesCount"网络中循环状态的数量
    "RecurrentStatesPositionList"NetStateObject 的循环状态的位置指定
    "SharedArraysCount"共享数组的总数
    "SummaryGraphic"表示网络层连接关系的示意图
  • 属性 "ArrayByteCount""ArraysTotalByteCount" 将所有数组视为已被初始化.

范例

打开所有单元关闭所有单元

基本范例  (3)

创建一个残差网络:

初始化网络中的所有数组:

把网络应用于输入:

NetChain 转换为 NetGraph

将一个网络层嵌套进 NetGraph 中:

范围  (14)

构建  (6)

构建一个包含线性链的网络:

可以省去一些网络层的名称,并且可以将相邻的边规则链接在一起:

最终的表达式是一样的:

构建一个含有需要两个输入的操作的网络图:

构建具有多个输入的网络图:

构建具有多个输出的网络图:

构建一个含有已命名层的网络:

根据已有的 NetGraphNetChain 构建网络图:

含有 NetPort 的特殊构建  (3)

创建一个网络,其中,输出是 LongShortTermMemoryLayer 的最终内部内部状态:

对输入应用该网络:

修改现有图的连接:

连接到封装的 NetChain 的内部端口:

展平所得的 NetGraph

运算  (3)

构建一个 NetGraph

把网络应用于输入:

将网络应用于 NumericArray

用双精度实数应用网络:

用系统默认的 GPU(如果有的话)应用网络:

计算网络的一阶导数:

创建含有类别解码器的网络:

运行网络:

通过指定第二个参数来获取解码器的属性:

构建一个显式计算损失的网络:

初始化网络并在输入上运行网络:

属性  (2)

构建一个网络:

用位置提取给定网络层:

获取网络层列表:

构建一个含有已命名层的网络:

通过名称提取给定网络层:

获取网络中的所有数组:

获取关联中的所有层:

获取边的列表:

应用  (1)

通过对创建一个产生两个分离的分类的网络的学习执行多任务. 首先,获取培训数据:

培训数据包含一幅图像以及对应的高层和低层的标签:

从 "Label" 和 "SubLabel" 列中提取唯一的标签:

创建一个会产生 500 个特征的向量的基卷积网络:

创建一个会为高层和低层标签产生分离分类的 NetGraph

培训网络:

基于一些范例图像计算培训的网络:

获取单个图像的概率:

从随机样本中,选择其网络会为"Label" 产生最高和最低熵预测的图像:

使用 NetTake 产生只计算 "SubLabel" 预测的子网:

对单个图像进行预测:

属性和关系  (4)

NetChain 对象可用于 NetGraph 中的层:

带有一个输入和一个输出的 NetGraph 对象可用作 NetChain 对象中的层:

可以用 Normal 提取用于构建 NetGraph 的层:

使用 Information[graph,"SummaryGraphic"] 获取显示图的基本连接的 Graphics[]

可能存在的问题  (1)

NetGraph 中定义边的顺序很重要. 创建一个计算矩阵-向量点积的 NetGraph

颠倒边的定义顺序会导致失败,因为这将计算不兼容维度的向量-矩阵积:

Wolfram Research (2016),NetGraph,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetGraph.html (更新于 2022 年).

文本

Wolfram Research (2016),NetGraph,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetGraph.html (更新于 2022 年).

CMS

Wolfram 语言. 2016. "NetGraph." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2022. https://reference.wolfram.com/language/ref/NetGraph.html.

APA

Wolfram 语言. (2016). NetGraph. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/NetGraph.html 年

BibTeX

@misc{reference.wolfram_2024_netgraph, author="Wolfram Research", title="{NetGraph}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/NetGraph.html}", note=[Accessed: 18-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_netgraph, organization={Wolfram Research}, title={NetGraph}, year={2022}, url={https://reference.wolfram.com/language/ref/NetGraph.html}, note=[Accessed: 18-November-2024 ]}