在while_op中使用`=`赋值,期望每轮更新结果,但实际只运行一次;期望能够更详细说明while_op的正确用法
Created by: fseasy
- 标题:
在while_op中使用
=
赋值,期望每轮更新结果,但实际只运行一次; 期望能够更详细说明while_op的正确用法 - 版本、环境信息: 1)PaddlePaddle版本:1.6.1 2)CPU/GPU:CUDA 10.1, cuDNN 7.0 3)系统环境:CentOS 7.7 4)Python版本号: 3.7.4 5)显存信息: 32G
- 复现信息:
import paddle.fluid as fluid
target_spos = fluid.layers.fill_constant(shape=[1], value=100, dtype="int32")
step_idx = fluid.layers.fill_constant(shape=[1], value=0, dtype="int64")
max_len = fluid.layers.fill_constant(shape=[1], value=3, dtype="int64")
cond = fluid.layers.less_than(x=step_idx, y=max_len)
while_op = fluid.layers.While(cond)
with while_op.block():
decode_position = target_spos + step_idx
fluid.layers.Print(step_idx)
fluid.layers.Print(decode_position)
fluid.layers.increment(x=step_idx, value=1, in_place=True)
fluid.layers.less_than(x=step_idx, y=max_len, cond=cond)
exe = fluid.Executor(fluid.CUDAPlace(0))
exe.run(fluid.default_startup_program())
exe.run(fluid.default_main_program())
- 问题描述:
- decode_position一直为100, 而step_idx正常累加
- 能否给while_op更多的说明,防止踩坑(譬如,是否只能用layers.assign, increment这些来赋值)