NetGraph
NetGraph[{layer1,layer2,…},{m1n1,m2n2,…}]
指定由 mi 层的输出作为 ni 层的输入的图定义的神经网络.
NetGraph["name1"layer1,"name2"layer2,…,{"namem1""namen1",…}]
指定带有明确命名层的网络.
更多信息和选项
- NetGraph 通常用于将神经网络操作与多个输入或输出组合在一起,用于残差连接、串接、注意力等操作. 结果是一个有向无环图.
- 可以通过指定 NetPort["input"]… 或 …NetPort["output"] 创建连接列表中整个 NetGraph 的输入或输出端口.
- 图中连接的线性链可以指定为 layer1layer2…layern,它会导致每个 layeri 连接至 layeri+1.
- 如果第 n 层或名称为 "layer" 层具有多个输入端口或多个输出端口,可以通过给出 NetPort[n,"port"] 或 NetPort["layer","port"] 消除歧义.
- 如果层具有接收多个输入的端口,例如,CatenateLayer 或 ThreadingLayer,则可以通过写 …,m1n,…,m2n,… 同时构建多个连接,其等同于 …,m1n,…,m2n,…. 输入 mi 总是按 m1,m2,… 的顺序传给 n.
- 如果任何层的一个或多个输入或输出端口未连接,那它们会成为整个 NetGraph 的端口.
- 如果几个网络层的多个输出端口未连接并且共享相同的名称 "Output",它们将变成整个 NetGraph 的独立端口,名称分别为 "Output1"、"Output2" 等.
- 通过给出 NetPort[layer,"port"]None 可将某些输出端口屏蔽.
- 通过指定数组的形状,用选项 "port"shape 可设置端口的 NetEncoder 或 NetDecoder,其中 shape 可为以下形式:
-
"Real" 单个实数 "Integer" 单个整数 Restricted["Integer",n] 1 和 n 之间的整数 Restricted["Integer",{m,n}] 位于 m 和 n 之间的整数 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] n LinearLayer[n] {layer1,layer2,…} NetChain[{layer1,layer2,…}] - 可包括以下训练参数:
-
LearningRateMultipliers Automatic 网络中可训练数组的学习率乘子 - 对于带有单个输入口的网络,NetGraph[…][data] 给出把网络应用于 data 的结果.
- 对于带有多个输入口的网络,NetGraph[…][<port1data1,… >] 为每个口提供数据.
- 对于只有一个输出端口的网络,NetGraph[…][data] 给出该端口的输出. 如果含有属性 prop 的 NetDecoder 被添加到输出,NetGraph[…][data,prop] 会计算该属性.
- NetGraph[…][data,"Properties"] 可用来获取可能属性的列表.
- 对于有多个输出端口的网络,NetGraph[…][data] 给出所有端口的输出的关联. NetGraph[…][data,NetPort["oport"]] 给出名为 "oport" 的输出端口的输出.
如果含有属性 prop 的 NetDecoder 被添加到该输出,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 应用网络时应使用的选项. 可能的选项包括:
-
BatchSize Automatic 对于输入列表,一次计算的输入数目 NetEvaluationMode "Test" 评估时使用什么模式 RandomSeeding Automatic 如果有伪随机生成器,如何播种 TargetDevice "CPU" 在哪个目标设备上进行评估 WorkingPrecision "Real32" 用于计算网络的数值精度 - WorkingPrecision 的可能设置包括:
-
"Real32" 使用单精度实数 (32-bit) "Real64" 使用双精度实数 (64-bit) "Mixed" 对于某些运算使用半精度实数 - WorkingPrecision"Mixed" 只支持 TargetDevice"GPU",在某些设备上会导致显著的性能增加.
- 当 NumericArray 作为输入时,输出将是 NumericArray. 在这种情况下,其数值类型来自于 WorkingPrecision.
- 当设置为 NetEvaluationMode"Training" 时,如 DropoutLayer 这样的层会显示出训练而不是普通的评估一样的行为.
- NetGraph 的 StandardForm 显示了图中层的连通性,并用边所表示的数组的维度来标注边. 单击图中的层可显示有关该层的更多信息.
- Normal[NetGraph[…]] 返回用于构建网络图的网络层的列表或关联. EdgeList[NetGraph[…]] 返回网络图中的连接的列表.
- NetGraph[…][[spec]] 从网络中提取由 spec 指定的层.
- 可通过 NetReplacePart、NetReplace、NetRename、NetFlatten、NetDelete、NetTake、… 对 NetGraph[…] 网络进行转换.
- Options[NetGraph] 给出构建网络的默认选项的列表. Options[NetGraph[…]] 给出在一些数据上运行网络的默认选项列表.
- Information[NetGraph[…]] 给出关于该网络的报告.
- Information[NetGraph[…],prop] 给出 NetGraph[…] 的属性 prop 的值. 可能的属性包括:
-
"Arrays" 给出网络中每个数组的关联 "ArraysByteCounts" 给出每个数组的字节数的关联 "ArraysCount" 所有网络层中数组的总量 "ArraysDimensions" 给出每个数组的维数的关联 "ArraysElementCounts" 给出每个数组中元素的数量的关联 "ArraysLearningRateMultipliers" 给出每个数组的默认学习率乘子的关联 "ArraysPositionList" NetExtract、NetReplacePart、LearningRateMultipliers、… 的数组的位置指定 "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" 将所有数组视为已被初始化.
范例
打开所有单元关闭所有单元范围 (14)
构建 (6)
含有 NetPort 的特殊构建 (3)
运算 (3)
构建一个 NetGraph:
将网络应用于 NumericArray:
应用 (1)
属性和关系 (4)
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 年