Update Exponential Moving Average. Should only call this method in train program.
(self)
| 4052 | return param_ema |
| 4053 | |
| 4054 | def update(self): |
| 4055 | """ |
| 4056 | Update Exponential Moving Average. Should only call this method in |
| 4057 | train program. |
| 4058 | """ |
| 4059 | global_step = paddle.optimizer.lr.autoincreased_step_counter( |
| 4060 | counter_name=self._step_counter_name |
| 4061 | ) |
| 4062 | param_master_emas = [] |
| 4063 | for param, tmp in self._params_tmps: |
| 4064 | with ( |
| 4065 | param.block.program._optimized_guard([param, tmp]), |
| 4066 | name_scope('moving_average'), |
| 4067 | ): |
| 4068 | param_ema = self._ema_vars[param.name] |
| 4069 | if param.name + '.master' in self._ema_vars: |
| 4070 | master_ema = self._ema_vars[param.name + '.master'] |
| 4071 | param_master_emas.append([param_ema, master_ema]) |
| 4072 | else: |
| 4073 | ema_t = param_ema * self._decay_var + param * ( |
| 4074 | 1 - self._decay_var |
| 4075 | ) |
| 4076 | paddle.assign(ema_t, output=param_ema) |
| 4077 | |
| 4078 | # for fp16 params |
| 4079 | for param_ema, master_ema in param_master_emas: |
| 4080 | default_main_program().global_block().append_op( |
| 4081 | type="cast", |
| 4082 | inputs={"X": master_ema}, |
| 4083 | outputs={"Out": param_ema}, |
| 4084 | attrs={ |
| 4085 | "in_dtype": master_ema.dtype, |
| 4086 | "out_dtype": param_ema.dtype, |
| 4087 | }, |
| 4088 | ) |
| 4089 | |
| 4090 | @signature_safe_contextmanager |
| 4091 | def apply(self, executor, need_restore=True): |
nothing calls this directly
no test coverage detected