未验证 提交 ea60e644 编写于 作者: M mapingshuo 提交者: GitHub

correct the LookaheadOptimizer programDesc, test=develop (#25688)

上级 b5f8784c
...@@ -4884,48 +4884,52 @@ class LookaheadOptimizer(object): ...@@ -4884,48 +4884,52 @@ class LookaheadOptimizer(object):
inputs={"X": fast_var}, inputs={"X": fast_var},
outputs={"Out": slow_var}) outputs={"Out": slow_var})
# Add Var k to main prog and startup prog with framework.program_guard(main_block.program, startup_program):
k = layers.create_global_var( # Add Var k to main prog and startup prog
name="lookahead_k", k = layers.create_global_var(
shape=[1], name="lookahead_k",
value=int(self.k), shape=[1],
dtype='int32', value=int(self.k),
persistable=True) dtype='int32',
persistable=True)
# Add Var alpha to main prog and startup prog # Add Var alpha to main prog and startup prog
alpha = layers.create_global_var( alpha = layers.create_global_var(
name="lookahead_alpha", name="lookahead_alpha",
shape=[1], shape=[1],
value=float(self.alpha), value=float(self.alpha),
dtype='float32', dtype='float32',
persistable=True) persistable=True)
# Add Var step # Add Var step
step = layers.create_global_var( step = layers.create_global_var(
name="lookahead_step", name="lookahead_step",
shape=[1], shape=[1],
value=int(0), value=int(0),
dtype='int32', dtype='int32',
persistable=True) persistable=True)
layers.increment(x=step, value=1.0, in_place=True) layers.increment(x=step, value=1.0, in_place=True)
# lookahead # lookahead
zero_var = layers.fill_constant(shape=[1], dtype='float32', value=0.0) zero_var = layers.fill_constant(
shape=[1], dtype='float32', value=0.0)
one_var = layers.fill_constant(shape=[1], dtype='float32', value=1.0)
one_var = layers.fill_constant(
mod = layers.elementwise_mod(step, k) shape=[1], dtype='float32', value=1.0)
with layers.control_flow.Switch() as switch:
with switch.case(mod == zero_var): mod = layers.elementwise_mod(step, k)
for param_name in params: with layers.control_flow.Switch() as switch:
fast_var = main_block.var(param_name) with switch.case(mod == zero_var):
slow_var = param_to_slow[param_name] for param_name in params:
tmp_var = layers.elementwise_add( fast_var = main_block.var(param_name)
layers.elementwise_mul(fast_var, alpha), slow_var = param_to_slow[param_name]
layers.elementwise_mul( tmp_var = layers.elementwise_add(
slow_var, layers.elementwise_sub(one_var, alpha))) layers.elementwise_mul(fast_var, alpha),
layers.assign(input=tmp_var, output=slow_var) layers.elementwise_mul(
layers.assign(input=tmp_var, output=fast_var) slow_var,
with switch.default(): layers.elementwise_sub(one_var, alpha)))
pass layers.assign(input=tmp_var, output=slow_var)
layers.assign(input=tmp_var, output=fast_var)
with switch.default():
pass
return mini_out return mini_out
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册