from bisect import bisect_right import numpy as np from helpers import MLP from megengine.optimizer import SGD, MultiStepLR from megengine.test import assertTensorClose def test_multi_step_lr(): mlp = MLP() opt = SGD(mlp.parameters(), lr=0.01, momentum=0.9) scheduler = MultiStepLR(opt, [3, 6, 8]) lr = np.array(0.01, dtype=np.float32) for i in range(10): for group in opt.param_groups: assertTensorClose( np.array(group["lr"], dtype=np.float32), (lr * 0.1 ** bisect_right([3, 6, 8], i)).astype(np.float32), max_err=5e-6, ) scheduler.step()