|
from pytorch_caney.lr_scheduler import build_scheduler |
|
|
|
import unittest |
|
from unittest.mock import Mock, patch |
|
|
|
|
|
class TestBuildScheduler(unittest.TestCase): |
|
def setUp(self): |
|
self.config = Mock( |
|
TRAIN=Mock( |
|
EPOCHS=300, |
|
WARMUP_EPOCHS=20, |
|
MIN_LR=1e-6, |
|
WARMUP_LR=1e-7, |
|
LR_SCHEDULER=Mock( |
|
NAME='cosine', |
|
DECAY_EPOCHS=30, |
|
DECAY_RATE=0.1, |
|
MULTISTEPS=[50, 100], |
|
GAMMA=0.1 |
|
) |
|
) |
|
) |
|
|
|
self.optimizer = Mock() |
|
self.n_iter_per_epoch = 100 |
|
|
|
def test_build_cosine_scheduler(self): |
|
with patch('pytorch_caney.lr_scheduler.CosineLRScheduler') \ |
|
as mock_cosine_scheduler: |
|
_ = build_scheduler(self.config, |
|
self.optimizer, |
|
self.n_iter_per_epoch) |
|
|
|
mock_cosine_scheduler.assert_called_once_with( |
|
self.optimizer, |
|
t_initial=300 * 100, |
|
cycle_mul=1., |
|
lr_min=1e-6, |
|
warmup_lr_init=1e-7, |
|
warmup_t=20 * 100, |
|
cycle_limit=1, |
|
t_in_epochs=False |
|
) |
|
|
|
|
|
if __name__ == '__main__': |
|
unittest.main() |
|
|