mindspore.ops.WhileLoop

查看源文件
class mindspore.ops.WhileLoop[源代码]

在编译阶段不进行循环展开的循环算子。 WhileLoop算子的执行逻辑可以近似表示为如下代码:

def WhileLoop(cond_func, loop_func, init_val):
    while(cond_func(init_val)):
        init_val = loop_func(init_val)
    return init_val

当前WhileLoop算子存在以下语法限制:

  • 暂不支持 loop_func 为副作用函数,如:对Parameter、全局变量的修改等操作。

  • 暂不支持 loop_func 的返回值与初始值 init_val 的类型或形状不同。

警告

这是一个实验性API,后续可能修改或删除。

输入:
  • cond_func (Function) - 循环的条件函数。

  • loop_func (Function) - 循环体函数,接受一个参数,并且返回值与输入参数的类型相同。

  • init_val (Union[Tensor, number, str, bool, list, tuple, dict]) - 循环的初始值。

输出:

Union[Tensor, number, str, bool, list, tuple, dict],循环的最终结果,和 init_val 的类型和形状相同。

异常:
  • TypeError - cond_func 不是一个函数。

  • TypeError - loop_func 不是一个函数。

  • ValueError - loop_func 不能接受 init_val 作为参数或者返回值和 init_val 的类型或形状不同。

支持平台:

Ascend GPU CPU

样例:

>>> from mindspore import ops
>>> def loop_while_fun(init_val):
...     val = init_val
...     val = val + 1
...     return val
...
>>> init_state = 10
>>> while_loop = ops.WhileLoop()
>>> result = while_loop(lambda x : x < 100, loop_while_fun, init_state)
>>> print(result)
100