表示可培训的循环层,它接受向量序列并产生大小为 n 的向量序列.
BasicRecurrentLayer[n,opts]
包括初始权重和其他参数的选项.
BasicRecurrentLayer
表示可培训的循环层,它接受向量序列并产生大小为 n 的向量序列.
BasicRecurrentLayer[n,opts]
包括初始权重和其他参数的选项.
更多信息和选项
- BasicRecurrentLayer[n] 表示一个网络,接受表示向量序列的输入矩阵并输出相同长度的序列.
- 输入序列的每个元素是一个大小为 k 的向量,输出序列的每个元素是一个大小为 n 的向量.
- 通常从 NetGraph、NetChain 等中自动推断得出输入向量的大小 k.
- BasicRecurrentLayer[n] 所表示的网络的输入端口和输出端口为:
-
"Input" 大小为 k 的向量组成的序列 "Output" 大小为 n 的向量组成的序列 - 给定输入序列 {x1,x2,…,xT},BasicRecurrentLayer 输出状态序列 {s1,s2,…,sT},其中 st=f[wi.xt+ws.st-1+b].函数 f 默认是 Tanh 函数.
- BasicRecurrentLayer[n] 有一个状态端口 "State",它是一个大小为 n 的向量.
- 在 NetGraph 中,形式为 src->NetPort[layer,"State"] 的连接可用于为 BasicRecurrentLayer 的状态提供初始值,在循环关系中对应于 s0. 默认初始值是零向量.
- 在 NetGraph 中,形式为 NetPort[layer,"State"]->dst 的连接可用于获取 BasicRecurrentLayer 状态的最终值,在循环关系中对应于 sT.
- NetStateObject 可用于创建一个会记住 BasicRecurrentLayer(在神经网络用于输入时更新)状态值得神经网络.
- 操作于大小为 k 的向量上的初始化的 BasicRecurrentLayer[…] 包含以下可培训的数组:
-
"InputWeights" Wx 大小为 n×k 的矩阵 "StateWeights" Ws 大小为 n×n 的矩阵 "Biases" b 大小为 n 的向量 - 在 BasicRecurrentLayer[n,opts] 中,可使用形式为 "array"->value 的规则对可培训数组给出初始值.
- 可包含以下可选参数:
-
"Activation" "Tanh" 用来获取输出状态的激励函数 "Dropout" None dropout 规则,其中,根据概率将单元设为零 LearningRateMultipliers Automatic 可训练数组的学习率乘子 - Parameter "Activation" can be set to either "Tanh" or "ReLU".
- 指定 "Dropout"->None 在培训时禁用 Dropout.
- 指定 "Dropout"->p 使用自动选择的 Dropout 方法让 Dropout 概率为 p.
- 指定 "Dropout"->{"method1"->p1,"method2"->p2,…} 可被用于组合带有相应退出概率的退出的指定方法. 可能的方法包括:
-
"VariationalWeights" 将 dropout 应用于加权矩阵间的 recurrent 连接(默认) "VariationalInput" 将 dropout 应用于输入的 gate contributions,在每个序列步骤中使用相同的单位模式 "VariationalState" 将 dropout 应用于前一状态的 gate contributions,在每个序列步骤中使用同样的单位模式 "StateUpdate" 在添加到前一个状态之前,将 dropout 应用于状态更新向量,在每个序列步骤中使用不同的单位模式 - dropout 方法 "VariationalInput" 和 "VariationalState" 基于 Gal 等人于 2016 年提出的方法,而 "StateUpdate" 基于 Semeniuta 等人于 2016 年提出的方法,"VariationalWeights" 基于 Merity 等人于 2017 年提出的方法.
- BasicRecurrentLayer[n,"Input"->shape] 允许指定输入的形式. shape 的可能的形式有:
-
NetEncoder[…] 编码器产生向量序列 {len,k} 长度为 k 的 len 向量序列 {len,Automatic} len 向量序列,其长度是被推断的 {"Varying",k} 向量的不同数目,每个长度为 k {"Varying",Automatic} 向量的不同数目,每个长度为被推断的长度 - 如果给出 NumericArray 作为输入,那么输出也将是一个 NumericArray.
- Options[BasicRecurrentLayer] 给出构建网络层的默认选项列表. Options[BasicRecurrentLayer[…]] 给出在某些数据上运行网络层的默认选项列表.
- Information[BasicRecurrentLayer[…]] 给出关于网络层的报告.
- Information[BasicRecurrentLayer[…],prop] 给出 BasicRecurrentLayer[…] 的属性 prop 的值. 可能的属性与 NetGraph 相同.
范例
打开所有单元 关闭所有单元基本范例 (2)
创建一个 BasicRecurrentLayer,产生长度为 3 的向量序列:
BasicRecurrentLayer[3]创建一个随机初始化的 BasicRecurrentLayer,它接受长度为 2 的向量并产生长度为 3 的向量序列:
rnn = NetInitialize@BasicRecurrentLayer[3, "Input" -> {"Varying", 2}]rnn[{{1, 2}, {0, 1}, {2, 1}, {1, 2}}]//MatrixForm范围 (5)
Ports (5)
创建一个随机初始化的 BasicRecurrentLayer,它接受字符串并产生长度为 2 的向量序列:
rnn =
NetInitialize@BasicRecurrentLayer[2, "Input" -> NetEncoder[{"Characters", Automatic, "UnitVector"}]]rnn["hello world"]//MatrixFormrnn[{"good", "bye"}]//Map[MatrixForm]创建一个随机初始化的神经网络并接受长度为 2 的向量序列,产生一长度为 3 的向量:
net = NetInitialize@NetChain[{
BasicRecurrentLayer[3, "Input" -> {"Varying", 2}],
SequenceLastLayer[]
}]net[{{1, 2}, {2, 1}, {3, 0}}]net[{{{1, 2}, {2, 1}, {3, 0}}, {{3, 3}, {0, 0}}}]创建一个 BasicRecurrentLayer,用 Ramp ("ReLU") 函数来生成其输出状态:
BasicRecurrentLayer[3, "Activation" -> "ReLU"]创建一个 NetGraph,它允许设置 BasicRecurrentLayer 的初始状态:
graph = NetInitialize@NetGraph[
{BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort["InitialState"] -> NetPort[1, "State"]}]graph[<|"Input" -> {{1, 2}, {2, 0}, {3, 1}}, "InitialState" -> {1, 1}|>]创建一个 NetGraph,它允许获取 BasicRecurrentLayer 最后状态:
graph = NetInitialize@NetGraph[
{BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]},
{NetPort[1, "State"] -> NetPort["FinalState"]}]graph[{{1, 2}, {2, 0}, {3, 1}}]%[["FinalState"]] == %[["Output", -1]]选项 (2)
"Dropout" (2)
创建一个 BasicRecurrentLayer,其中指定退出的方法:
BasicRecurrentLayer[2, "Dropout" -> {"VariationalInput" -> 0.1, "VariationalState" -> 0.1}]创建一个带有指定退出概率的随机初始化的 BasicRecurrentLayer:
rnn = NetInitialize@BasicRecurrentLayer[2, "Dropout" -> 0.5, "Input" -> {"Varying", 2}]data = {{1, 2}, {3, 4}, {1, 0}, {2, 2}};
rnn[data]//MatrixFormrnn2 = NetReplacePart[rnn, "Dropout" -> 0];
rnn[data] == rnn2[data]使用 NetEvaluationMode 强迫退出的培训行为:
rnn[data, NetEvaluationMode -> "Train"]//MatrixFormTable[rnn[{{1, 2}, {3, 4}, {5, 6}, {7, 8}}, NetEvaluationMode -> "Train"], 5]//Map[MatrixPlot[#, ImageSize -> 30, FrameTicks -> None]&]应用 (2)
enc = NetEncoder[{"Characters", {DigitCharacter, "+"}}];
makeRule[a_, b_] := IntegerString[a] <> "+" <> IntegerString[b] -> a + b;
trainingData = Flatten@Table[makeRule[i, j], {i, 0, 99}, {j, 0, 99}];
RandomSample[trainingData, 4]//InputForm使用堆栈的 BasicRecurrentLayer 层创建网络,它读取输入字符串并预测数值结果:
net = NetChain[{UnitVectorLayer[], BasicRecurrentLayer[40], BasicRecurrentLayer[40], SequenceLastLayer[], LinearLayer[1]}, "Input" -> enc, "Output" -> "Scalar"];trained = NetTrain[net, trainingData, BatchSize -> 64, MaxTrainingRounds -> 200, ValidationSet -> Scaled[0.1]]Round@trained[{"5+2", "10+25", "9+11", "44+44"}]创建基于包含 x 和 y 的,或者比较 x 和 y 数目的 Less, Greater 或 Equal 的培训数据. 培训数据包含所有可能的句子长度不超过 8:
alphabet = {"x", "y", " "};
inputs = Flatten@Table[StringJoin /@ Tuples[alphabet, n], {n, 1, 8}];
cmpXY[str_] := Switch[Sign[StringCount[str, "x"] - StringCount[str, "y"]], -1, Less, 0, Equal, 1, Greater];
outputs = cmpXY /@ inputs;
trainingData = Thread[inputs -> outputs];
RandomSample[trainingData, 4]//InputForm创建一个包含 BasicRecurrentLayer 的网络,读取输入字符串并预测 Less、Greater 或 Equal 之一:
net = NetChain[{UnitVectorLayer[], BasicRecurrentLayer[5], SequenceLastLayer[], LinearLayer[3], SoftmaxLayer[]}, "Input" -> NetEncoder[{"Characters", alphabet}], "Output" -> NetDecoder[{"Class", {Less, Equal, Greater}}]];trained = NetTrain[net, trainingData, BatchSize -> 64, MaxTrainingRounds -> 100, ValidationSet -> Scaled[0.2]]trained[{"xxy", "xyy", "xyxy"}]NetMeasurements[trained, trainingData, "Accuracy"]属性和关系 (1)
NetStateObject 可用于创建记住 BasicRecurrentLayer 的神经网络:
sobj = NetStateObject[NetInitialize@BasicRecurrentLayer[2, "Input" -> {"Varying", 2}]]每次计算会修改存于 NetStateObject 的状态:
sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]sobj[{{0, 0}, {1, 1}}]技术笔记
相关指南
-
▪
- 神经网络层
文本
Wolfram Research (2017),BasicRecurrentLayer,Wolfram 语言函数,https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html (更新于 2026 年).
CMS
Wolfram 语言. 2017. "BasicRecurrentLayer." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2026. https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html.
APA
Wolfram 语言. (2017). BasicRecurrentLayer. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html 年
BibTeX
@misc{reference.wolfram_2026_basicrecurrentlayer, author="Wolfram Research", title="{BasicRecurrentLayer}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html}", note=[Accessed: 19-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_basicrecurrentlayer, organization={Wolfram Research}, title={BasicRecurrentLayer}, year={2026}, url={https://reference.wolfram.com/language/ref/BasicRecurrentLayer.html}, note=[Accessed: 19-June-2026]}