控制流

    条件分支,允许对同一个batch的输入,根据给定的条件,分别选择 或 false_block 中的逻辑进行执行,执行完成之后再将两个分支的输出合并为同一个输出。通常,条件表达式可由 less_than, 等逻辑比较 API 产生。

    请参考 IfElse

    多分支选择结构,如同程序语言中常见的 switch-case 声明, 其根据输入表达式的取值不同,选择不同的分支执行。具体来说,Fluid 所定义的 Switch 控制流有如下特性:

    • case的条件是个bool类型的值,即在Program中是一个张量类型的Variable;
    • 依次检查逐个case,选择第一个满足条件的case执行,完成执行后即退出所属的block;

    While 循环,当条件判断为真时,循环执行 While 控制流所属 内的逻辑,条件判断为假时退出循环。与之相关的API有

    • :累加API,通常用于对循环次数进行计数;
    • array_read :从 LOD_TENSOR_ARRAY 中指定的位置读入Variable,进行计算;
    • :将 Variable 写回到 LOD_TENSOR_ARRAY 指定的位置,存储计算结果。

    请参考 While

    即动态RNN,可处理一个batch不等长的序列数据,其接受 lod_level=1 的 Variable 作为输入,在 DynamicRNN 的 内,用户需自定义RNN的单步计算逻辑。在每一个时间步,用户可将需记忆的状态写入到 DynamicRNNmemory 中,并将需要的输出写出到其 output 中。

    请参考

    即静态RNN,只能处理固定长度的序列数据,接受 的 Variable 作为输入。与 DynamicRNN 类似,在RNN的每单个时间步,用户需自定义计算逻辑,并可将状态和输出写出。

    请参考 StaticRNN