mindspore.ops.ForiLoop
- class mindspore.ops.ForiLoop[源代码]
一段范围内的循环操作。 ForiLoop算子的执行逻辑可以近似表示为如下代码:
def ForiLoop(lower, upper, loop_func, init_val): for i in range(lower, upper): init_val = loop_func(i, init_val) return init_val
当前ForiLoop算子存在以下语法限制:
暂不支持 loop_func 为副作用函数,如:对Parameter、全局变量的修改等操作。
暂不支持 loop_func 的返回值与初始值 init_val 的类型或形状不同。
暂不支持负数或自定义增量。
警告
这是一个实验性API,后续可能修改或删除。
- 输入:
lower (Union[int, Tensor]) - 循环的起始索引值。
upper (Union[int, Tensor]) - 循环的结束索引值。
loop_func (Function) - 循环体函数。
init_val (Union[Tensor, number, str, bool, list, tuple, dict]) - 循环的初始值。
unroll (bool, 可选) - 是否在编译阶段展开,只在循环次数确定的情况下有效。默认值:
True
。
- 输出:
Union[Tensor, number, str, bool, list, tuple, dict],循环的最终结果,和 init_val 的类型和形状相同。
- 异常:
TypeError - lower 不是一个整数或者Tensor。
TypeError - upper 不是一个整数或者Tensor。
TypeError - loop_func 不是一个函数。
ValueError - loop_func 不能接受索引值和 init_val 作为参数,或者返回值和 init_val 的类型或形状不同。
- 支持平台:
Ascend
GPU
CPU
样例:
>>> from mindspore import ops >>> def cumsum(index, res): ... return index + res ... >>> result_init = 0 >>> fori_loop = ops.ForiLoop() >>> result = fori_loop(0, 4, cumsum, result_init) >>> print(result) 6