From a585092b0feafb69c4c20715a165701608a66efe Mon Sep 17 00:00:00 2001 From: wuzewu Date: Tue, 28 Apr 2020 19:34:30 +0800 Subject: [PATCH] Update strategy --- demo/object_detection/train_faster_rcnn.py | 2 +- demo/object_detection/train_ssd.py | 2 +- demo/object_detection/train_yolo.py | 2 +- paddlehub/finetune/strategy.py | 59 +++++++++++++--------- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/demo/object_detection/train_faster_rcnn.py b/demo/object_detection/train_faster_rcnn.py index 883182a8..e64600ec 100644 --- a/demo/object_detection/train_faster_rcnn.py +++ b/demo/object_detection/train_faster_rcnn.py @@ -63,7 +63,7 @@ def finetune(args): enable_memory_optim=False, checkpoint_dir=args.checkpoint_dir, strategy=hub.finetune.strategy.DefaultFinetuneStrategy( - learning_rate=0.00025, optimizer_name="adam")) + learning_rate=0.00025, optimizer_name="momentum", momentum=0.9)) task = hub.FasterRCNNTask( data_reader=data_reader, diff --git a/demo/object_detection/train_ssd.py b/demo/object_detection/train_ssd.py index 0bdec293..e4c77b97 100644 --- a/demo/object_detection/train_ssd.py +++ b/demo/object_detection/train_ssd.py @@ -45,7 +45,7 @@ def finetune(args): enable_memory_optim=False, checkpoint_dir=args.checkpoint_dir, strategy=hub.finetune.strategy.DefaultFinetuneStrategy( - learning_rate=0.00025, optimizer_name="adam")) + learning_rate=0.00025, optimizer_name="momentum", momentum=0.9)) task = hub.SSDTask( data_reader=data_reader, diff --git a/demo/object_detection/train_yolo.py b/demo/object_detection/train_yolo.py index 16d7dcc7..f9e0711b 100644 --- a/demo/object_detection/train_yolo.py +++ b/demo/object_detection/train_yolo.py @@ -45,7 +45,7 @@ def finetune(args): enable_memory_optim=False, checkpoint_dir=args.checkpoint_dir, strategy=hub.finetune.strategy.DefaultFinetuneStrategy( - learning_rate=0.00025, optimizer_name="adam")) + learning_rate=0.00025, optimizer_name="momentum", momentum=0.9)) task = hub.YOLOTask( data_reader=data_reader, diff --git a/paddlehub/finetune/strategy.py b/paddlehub/finetune/strategy.py index 9073f941..dba19028 100644 --- a/paddlehub/finetune/strategy.py +++ b/paddlehub/finetune/strategy.py @@ -133,39 +133,39 @@ def set_gradual_unfreeze(depth_params_dict, unfreeze_depths): class DefaultStrategy(object): - def __init__(self, learning_rate=1e-4, optimizer_name="adam"): + def __init__(self, learning_rate=1e-4, optimizer_name="adam", **kwargs): self.learning_rate = learning_rate self._optimizer_name = optimizer_name if self._optimizer_name.lower() == "sgd": self.optimizer = fluid.optimizer.SGD( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "adagrad": self.optimizer = fluid.optimizer.Adagrad( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "adamax": self.optimizer = fluid.optimizer.Adamax( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "decayedadagrad": self.optimizer = fluid.optimizer.DecayedAdagrad( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "ftrl": self.optimizer = fluid.optimizer.Ftrl( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "larsmomentum": self.optimizer = fluid.optimizer.LarsMomentum( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "momentum": self.optimizer = fluid.optimizer.Momentum( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "decayedadagrad": self.optimizer = fluid.optimizer.DecayedAdagrad( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) elif self._optimizer_name.lower() == "rmsprop": self.optimizer = fluid.optimizer.RMSPropOptimizer( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) else: self.optimizer = fluid.optimizer.Adam( - learning_rate=self.learning_rate) + learning_rate=self.learning_rate, **kwargs) def execute(self, loss, data_reader, config, dev_count): if self.optimizer is not None: @@ -186,10 +186,13 @@ class CombinedStrategy(DefaultStrategy): learning_rate=1e-4, scheduler=None, regularization=None, - clip=None): + clip=None, + **kwargs): super(CombinedStrategy, self).__init__( - optimizer_name=optimizer_name, learning_rate=learning_rate) - + optimizer_name=optimizer_name, + learning_rate=learning_rate, + **kwargs) + self.kwargs = kwargs # init set self.scheduler = { "warmup": 0.0, @@ -379,7 +382,9 @@ class CombinedStrategy(DefaultStrategy): # set optimizer super(CombinedStrategy, self).__init__( - optimizer_name=self._optimizer_name, learning_rate=scheduled_lr) + optimizer_name=self._optimizer_name, + learning_rate=scheduled_lr, + **self.kwargs) # discriminative learning rate # based on layer @@ -568,7 +573,8 @@ class AdamWeightDecayStrategy(CombinedStrategy): lr_scheduler="linear_decay", warmup_proportion=0.1, weight_decay=0.01, - optimizer_name="adam"): + optimizer_name="adam", + **kwargs): scheduler = {"warmup": warmup_proportion} if lr_scheduler == "noam_decay": scheduler["noam_decay"] = True @@ -587,14 +593,16 @@ class AdamWeightDecayStrategy(CombinedStrategy): learning_rate=learning_rate, scheduler=scheduler, regularization=regularization, - clip=clip) + clip=clip, + **kwargs) class L2SPFinetuneStrategy(CombinedStrategy): def __init__(self, learning_rate=1e-4, optimizer_name="adam", - regularization_coeff=1e-3): + regularization_coeff=1e-3, + **kwargs): scheduler = {} regularization = {"L2SP": regularization_coeff} clip = {} @@ -603,14 +611,16 @@ class L2SPFinetuneStrategy(CombinedStrategy): learning_rate=learning_rate, scheduler=scheduler, regularization=regularization, - clip=clip) + clip=clip, + **kwargs) class DefaultFinetuneStrategy(CombinedStrategy): def __init__(self, learning_rate=1e-4, optimizer_name="adam", - regularization_coeff=1e-3): + regularization_coeff=1e-3, + **kwargs): scheduler = {} regularization = {"L2": regularization_coeff} clip = {} @@ -620,7 +630,8 @@ class DefaultFinetuneStrategy(CombinedStrategy): learning_rate=learning_rate, scheduler=scheduler, regularization=regularization, - clip=clip) + clip=clip, + **kwargs) class ULMFiTStrategy(CombinedStrategy): @@ -632,7 +643,8 @@ class ULMFiTStrategy(CombinedStrategy): dis_blocks=3, factor=2.6, frz_blocks=3, - params_layer=None): + params_layer=None, + **kwargs): scheduler = { "slanted_triangle": { @@ -656,4 +668,5 @@ class ULMFiTStrategy(CombinedStrategy): learning_rate=learning_rate, scheduler=scheduler, regularization=regularization, - clip=clip) + clip=clip, + **kwargs) -- GitLab