From 680cdb55bbde415c2f750e58808faedc6d1a6bf3 Mon Sep 17 00:00:00 2001
From: speech_asr <wangjiaming.wjm@alibaba-inc.com>
Date: 星期三, 19 四月 2023 14:49:36 +0800
Subject: [PATCH] update

---
 funasr/utils/build_optimizer.py |   26 +++++++++++++
 funasr/bin/train.py             |   22 ++--------
 funasr/utils/build_model.py     |    2 
 funasr/utils/build_scheduler.py |   31 +++++++++++++++
 4 files changed, 63 insertions(+), 18 deletions(-)

diff --git a/funasr/bin/train.py b/funasr/bin/train.py
index 2a5dc98..c0e4157 100644
--- a/funasr/bin/train.py
+++ b/funasr/bin/train.py
@@ -9,6 +9,8 @@
 from funasr.utils.build_dataloader import build_dataloader
 from funasr.utils.build_distributed import build_distributed
 from funasr.utils.prepare_data import prepare_data
+from funasr.utils.build_optimizer import build_optimizer
+from funasr.utils.build_scheduler import build_scheduler
 from funasr.utils.types import str2bool
 
 
@@ -355,20 +357,6 @@
                                                                    distributed_option.dist_rank,
                                                                    distributed_option.local_rank))
 
-    # optimizers = cls.build_optimizers(args, model=model)
-    # schedulers = []
-    # for i, optim in enumerate(optimizers, 1):
-    #     suf = "" if i == 1 else str(i)
-    #     name = getattr(args, f"scheduler{suf}")
-    #     conf = getattr(args, f"scheduler{suf}_conf")
-    #     if name is not None:
-    #         cls_ = scheduler_classes.get(name)
-    #         if cls_ is None:
-    #             raise ValueError(
-    #                 f"must be one of {list(scheduler_classes)}: {name}"
-    #             )
-    #         scheduler = cls_(optim, **conf)
-    #     else:
-    #         scheduler = None
-    #
-    #     schedulers.append(scheduler)
+    model = build_model(args)
+    optimizers = build_optimizer(args, model=model)
+    schedule = build_scheduler(args)
diff --git a/funasr/utils/build_model.py b/funasr/utils/build_model.py
index 9fa980a..abe384c 100644
--- a/funasr/utils/build_model.py
+++ b/funasr/utils/build_model.py
@@ -2,7 +2,7 @@
 
 def build_model(args):
     if args.token_list is not None:
-        with open(args.token_list, encoding="utf-8") as f:
+        with open(args.token_list) as f:
             token_list = [line.rstrip() for line in f]
             args.token_list = list(token_list)
             vocab_size = len(token_list)
diff --git a/funasr/utils/build_optimizer.py b/funasr/utils/build_optimizer.py
new file mode 100644
index 0000000..3b27994
--- /dev/null
+++ b/funasr/utils/build_optimizer.py
@@ -0,0 +1,26 @@
+import torch
+
+from funasr.optimizers.fairseq_adam import FairseqAdam
+from funasr.optimizers.sgd import SGD
+
+
+def build_optimizer(args, model):
+    optim_classes = dict(
+        adam=torch.optim.Adam,
+        fairseq_adam=FairseqAdam,
+        adamw=torch.optim.AdamW,
+        sgd=SGD,
+        adadelta=torch.optim.Adadelta,
+        adagrad=torch.optim.Adagrad,
+        adamax=torch.optim.Adamax,
+        asgd=torch.optim.ASGD,
+        lbfgs=torch.optim.LBFGS,
+        rmsprop=torch.optim.RMSprop,
+        rprop=torch.optim.Rprop,
+    )
+
+    optim_class = optim_classes.get(args.optim)
+    if optim_class is None:
+        raise ValueError(f"must be one of {list(optim_classes)}: {args.optim}")
+    optimizer = optim_class(model.parameters(), **args.optim_conf)
+    return optimizer
\ No newline at end of file
diff --git a/funasr/utils/build_scheduler.py b/funasr/utils/build_scheduler.py
new file mode 100644
index 0000000..f0e6d1f
--- /dev/null
+++ b/funasr/utils/build_scheduler.py
@@ -0,0 +1,31 @@
+import torch
+import torch.multiprocessing
+import torch.nn
+import torch.optim
+
+from funasr.schedulers.noam_lr import NoamLR
+from funasr.schedulers.tri_stage_scheduler import TriStageLR
+from funasr.schedulers.warmup_lr import WarmupLR
+
+
+def build_scheduler(args, optimizer):
+    scheduler_classes = dict(
+        ReduceLROnPlateau=torch.optim.lr_scheduler.ReduceLROnPlateau,
+        lambdalr=torch.optim.lr_scheduler.LambdaLR,
+        steplr=torch.optim.lr_scheduler.StepLR,
+        multisteplr=torch.optim.lr_scheduler.MultiStepLR,
+        exponentiallr=torch.optim.lr_scheduler.ExponentialLR,
+        CosineAnnealingLR=torch.optim.lr_scheduler.CosineAnnealingLR,
+        noamlr=NoamLR,
+        warmuplr=WarmupLR,
+        tri_stage=TriStageLR,
+        cycliclr=torch.optim.lr_scheduler.CyclicLR,
+        onecyclelr=torch.optim.lr_scheduler.OneCycleLR,
+        CosineAnnealingWarmRestarts=torch.optim.lr_scheduler.CosineAnnealingWarmRestarts,
+    )
+
+    scheduler_class = scheduler_classes.get(args.scheduler)
+    if scheduler_class is None:
+        raise ValueError(f"must be one of {list(scheduler_classes)}: {args.scheduler}")
+    scheduler = scheduler_class(optimizer, **args.scheduler_conf)
+    return scheduler
\ No newline at end of file

--
Gitblit v1.9.1