def _update_d_and_f(self, state):
d, f = state['d'], state['f']
if self.t > 1:
old_f = float(cuda.to_cpu(state['f']))
if self.loss > old_f:
delta = self.lower_threshold + 1.
Delta = self.upper_threshold + 1.
else:
delta = 1. / (self.upper_threshold + 1.)
Delta = 1. / (self.lower_threshold + 1.)
c = min(max(delta, self.loss / (old_f + 1e-12)), Delta)
new_f = c * old_f
r = abs(new_f - old_f) / (min(new_f, old_f) + 1e-12)
d += (1 - self.beta3) * (r - d)
f[:] = new_f
else:
f[:] = self.loss
评论列表
文章目录