灵活运用循环层
Wolfram 语言为用户提供高级循环层,在保证性能的前提下能够无缝且高效地处理不同长度的批量输入。此外,NetStateObject 和 NetFoldOperator 等工具可以轻松使用自定义高级循环层的循环计算功能及定义。
首先,演示如何创建和使用简单的循环层。定义一个循环层,作用于由大小为 2 的向量组成的可变长度序列。
在一批长度不同的序列上运行该网络层。
定义一个网络,接受可变长度的字符序列,为每个序列产生一个数字。
在一批长度不同的字符串上运行该网络层。
默认情况下,通过 NetChain 或 NetGraph 定义的循环层或网络是没有状态的。它们的初始内部状态是零向量,并在每次计算后重置,因此对相同输入重复进行计算将产生相同的结果。
可用 NetStateObject 将循环层转换为有状态的对象。NetStateObject 在计算后保持自己的状态,因此对相同输入重复进行计算通常会产生不同的结果。这是一种保持循环层的内部状态的方法,例如,高效地生成文本。
现在演示如何使用 NetFoldOperator 根据现有 NetGraph 创建自定义循环层。定义乘性 LSTM 的核心单元。
显示完整的 Wolfram 语言输入
创建乘性 LSTM。
在一批由大小为 64 的向量组成的可变长度序列上运行该网络层。