表示一个网络,将 net 应用于一个序列及其逆序列,然后将两个结果连接成一个输出序列.
NetBidirectionalOperator[{fnet,bnet}]
对正常输入应用 fnet,对逆序输入应用 bnet.
NetBidirectionalOperator[nets,agg]
用指定的聚合函数聚合两个输出序列.
NetBidirectionalOperator
表示一个网络,将 net 应用于一个序列及其逆序列,然后将两个结果连接成一个输出序列.
NetBidirectionalOperator[{fnet,bnet}]
对正常输入应用 fnet,对逆序输入应用 bnet.
NetBidirectionalOperator[nets,agg]
用指定的聚合函数聚合两个输出序列.
更多信息和选项
- 在 NetBidirectionalOperator[net] 中,net 应该是一个接受序列并产生序列的网络. net 通常是循环层 BasicRecurrentLayer、GatedRecurrentLayer、LongShortTermMemoryLayer 或 NetFoldOperator 之一.
- NetBidirectionalOperator[net] 创建 net 的两个副本,独立进行训练,相当于 NetBidirectionalOperator[{net,net}].
- 在 NetBidirectionalOperator[…,agg] 中,agg 的有效设置包括:
-
Catenate 连接正序和逆序输出(默认) Total 将正序和逆序输出相加 Mean 取正序和逆序输出的均值 - 可包含以下训练参数:
-
LearningRateMultipliers Automatic 网络中可训练数组的学习率乘子 - NetBidirectionalOperator[net,Catenate] 将连接正序和逆序输出的每个元素,而不是连接序列本身.
- 如果 net 产生的是由长度为 d 的向量组成的序列,NetBidirectionalOperator[net,Catenate] 将产生由长度为 2×d 的向量组成的序列. 对于聚合函数 Total 和 Mean,向量的长度为 d.
- 对于 net 的反向应用,首先将输入反向,然后正常应用 net,然后在与 net 的正向应用结合之前,如果 net 产生了向量序列,则再次将输出反向.
- NetExtract 允许通过 "ForwardNet" 和 "BackwardNet" 访问前向和反向网络.
- 可以访问 NetBidirectionalOperator[…] 中前向网络和反向网络的状态,同样名称前加上 "Forward…" 和 "Backward…" 为前缀即可.
- Options[NetBidirectionalOperator] 给出构建运算器的默认选项的列表.. Options[NetBidirectionalOperator[…]] 给出在一些数据上运行运算器的默认选项列表.
- Information[NetBidirectionalOperator[…]] 给出关于该运算器的报告.
- Information[NetBidirectionalOperator[…],prop] 给出 NetBidirectionalOperator[…] 的属性 prop 的值. 可能的属性与 NetGraph 相同.
范例
打开所有单元 关闭所有单元基本范例 (4)
net = LongShortTermMemoryLayer[3, "Input" -> {"Varying", 2}];
bidir = NetInitialize@NetBidirectionalOperator[net]bidir[{{1, 2}, {0, 1}, {0, 2}}]forward = BasicRecurrentLayer[2, "Input" -> {"Varying", 2}];
backward = BasicRecurrentLayer[4, "Input" -> {"Varying", 2}];
bidir = NetInitialize@NetBidirectionalOperator[{forward, backward}]bidir[{{1, 2}, {0, 1}, {0, 2}}]net = LongShortTermMemoryLayer[3, "Input" -> {"Varying", 2}];
bidir = NetInitialize@NetBidirectionalOperator[net, Total]bidir[{{1, 2}, {0, 1}, {0, 2}}]创建一个运算器,产生由正向和反向循环层处理的两个序列的最后面的元素:
rnn = LongShortTermMemoryLayer[4, "Input" -> {"Varying", 2}]bidir = NetInitialize@NetBidirectionalOperator[NetChain[{rnn, SequenceLastLayer[]}], Catenate]bidir[{{1, 2}, {0, 1}, {0, 2}}]范围 (2)
bidir = NetInitialize@NetGraph[{NetBidirectionalOperator[GatedRecurrentLayer[2]]}, {NetPort["ForwardState"] -> NetPort[1, "ForwardState"], NetPort["BackwardState"] -> NetPort[1, "BackwardState"]}, "Input" -> {"Varying", 3}]bidir[<|"Input" -> RandomReal[1, {5, 3}], "ForwardState" -> {0, 1}, "BackwardState" -> {1, 0}|>]bidir = NetInitialize@NetGraph[<|"RNN" -> NetBidirectionalOperator[GatedRecurrentLayer[2]], "InitialForwardState" -> NetArrayLayer[], "InitialBackwardState" -> NetArrayLayer[]|>, {"InitialForwardState" -> NetPort["RNN", "ForwardState"], "InitialBackwardState" -> NetPort["RNN", "BackwardState"]}, "Input" -> {"Varying", 3}]bidir[RandomReal[1, {5, 3}]]属性和关系 (2)
net = LongShortTermMemoryLayer[10]NetBidirectionalOperator[net,Catenate] 相当于下面的 NetGraph:
NetGraph[<|"ForwardNet" -> net, "Reverse" -> SequenceReverseLayer[], "BackwardNet" -> net, "Reverse2" -> SequenceReverseLayer[], "Catenate" -> CatenateLayer[2]|>, {{"ForwardNet", "Reverse" -> "BackwardNet" -> "Reverse2"} -> "Catenate"}]NetBidirectionalOperator[net,Total] 相当于下面的 NetGraph:
NetGraph[<|"ForwardNet" -> net, "Reverse" -> SequenceReverseLayer[], "BackwardNet" -> net, "Reverse2" -> SequenceReverseLayer[], "Total" -> ThreadingLayer[Plus]|>, {{"ForwardNet", "Reverse" -> "BackwardNet" -> "Reverse2"} -> "Total"}]net = NetChain[{LongShortTermMemoryLayer[10], AggregationLayer[Max, 1]}]NetBidirectionalOperator[net,Catenate] 相当于下面的 NetGraph:
NetGraph[<|"ForwardNet" -> net, "Reverse" -> SequenceReverseLayer[], "BackwardNet" -> net, "Catenate" -> CatenateLayer[1]|>, {{"ForwardNet", "Reverse" -> "BackwardNet"} -> "Catenate"}]NetBidirectionalOperator[net,Total] 相当于下面的 NetGraph:
NetGraph[<|"ForwardNet" -> net, "Reverse" -> SequenceReverseLayer[], "BackwardNet" -> net, "Total" -> ThreadingLayer[Plus]|>, {{"ForwardNet", "Reverse" -> "BackwardNet"} -> "Total"}]可能存在的问题 (1)
对于聚合函数 Total 和 Mean,前向和后向网络必须产生长度相同的数组组成的序列:
forward = BasicRecurrentLayer[2, "Input" -> {"Varying", 2}];
backward = BasicRecurrentLayer[4, "Input" -> {"Varying", 2}];
NetBidirectionalOperator[{forward, backward}]NetBidirectionalOperator[{forward, backward}, Total]文本
Wolfram Research (2018),NetBidirectionalOperator,Wolfram 语言函数,https://reference.wolfram.com/language/ref/NetBidirectionalOperator.html (更新于 2020 年).
CMS
Wolfram 语言. 2018. "NetBidirectionalOperator." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/NetBidirectionalOperator.html.
APA
Wolfram 语言. (2018). NetBidirectionalOperator. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/NetBidirectionalOperator.html 年
BibTeX
@misc{reference.wolfram_2026_netbidirectionaloperator, author="Wolfram Research", title="{NetBidirectionalOperator}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/NetBidirectionalOperator.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_netbidirectionaloperator, organization={Wolfram Research}, title={NetBidirectionalOperator}, year={2020}, url={https://reference.wolfram.com/language/ref/NetBidirectionalOperator.html}, note=[Accessed: 03-November-2026]}