pytorch-optimizer 3.4.1__tar.gz → 3.4.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/PKG-INFO +4 -3
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/README.md +2 -1
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pyproject.toml +5 -5
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/__init__.py +1 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/__init__.py +2 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/experimental/ranger25.py +1 -1
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/schedulefree.py +32 -58
- pytorch_optimizer-3.4.2/pytorch_optimizer/optimizer/scion.py +113 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/LICENSE +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/__init__.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/exception.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/optimizer.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/scheduler.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/type.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/__init__.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/bi_tempered.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/cross_entropy.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/dice.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/f1.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/focal.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/jaccard.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/ldam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/lovasz.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/tversky.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/rex.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/a2grad.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adabelief.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adabound.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adadelta.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adafactor.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adahessian.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adai.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adalite.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adam_mini.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamax.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamg.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamod.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamp.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adams.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamw.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adan.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adanorm.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adapnm.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adashift.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ademamix.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adopt.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/agc.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/aggmo.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/aida.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/alig.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/amos.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/apollo.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/avagrad.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/came.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/dadapt.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/demo.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/exadam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fadam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/focus.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fp16.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fromage.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ftrl.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/galore.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/galore_utils.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/gradient_centralization.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/grams.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/gravity.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/grokfast.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/kate.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lamb.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/laprop.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lars.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lion.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lomo.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lookahead.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/madgrad.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/mars.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/msvag.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/muon.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/nero.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/novograd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/orthograd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/padam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pcgrad.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pid.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pnm.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/prodigy.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/psgd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/psgd_utils.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/qhadam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/qhm.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/radam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ranger.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ranger21.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/rotograd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sgd.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sgdp.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/shampoo.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/shampoo_utils.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sm3.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/soap.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sophia.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/spam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/srmm.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/swats.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/tam.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/tiger.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/trac.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/utils.py +0 -0
- {pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/yogi.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pytorch_optimizer
|
|
3
|
-
Version: 3.4.
|
|
3
|
+
Version: 3.4.2
|
|
4
4
|
Summary: optimizer & lr scheduler & objective function collections in PyTorch
|
|
5
5
|
License: Apache-2.0
|
|
6
|
-
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdamG,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdEMAMix,ADOPT,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,APOLLO,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DeMo,DiffGrad,EXAdam,FAdam,FOCUS,Fromage,FTRL,GaLore,Grams,Gravity,GrokFast,GSAM,Kate,Lamb,LaProp,LARS,Lion,LOMO,Lookahead,MADGRAD,MARS,MSVAG,Muno,Nero,NovoGrad,OrthoGrad,PAdam,PCGrad,PID,PNM,Prodigy,PSGD,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,GCSAM,LookSAM,ScheduleFreeSGD,ScheduleFreeAdamW,ScheduleFreeRAdam,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SOAP,SopihaH,SPAM,SRMM,StableAdamW,SWATS,TAM,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
|
|
6
|
+
Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdamG,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdEMAMix,ADOPT,AdaHessian,Adai,Adalite,AdaLomo,AdamMini,AdamP,AdamS,Adan,AggMo,Aida,AliG,Amos,Apollo,APOLLO,AvaGrad,bSAM,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DeMo,DiffGrad,EXAdam,FAdam,FOCUS,Fromage,FTRL,GaLore,Grams,Gravity,GrokFast,GSAM,Kate,Lamb,LaProp,LARS,Lion,LOMO,Lookahead,MADGRAD,MARS,MSVAG,Muno,Nero,NovoGrad,OrthoGrad,PAdam,PCGrad,PID,PNM,Prodigy,PSGD,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,GCSAM,LookSAM,ScheduleFreeSGD,ScheduleFreeAdamW,ScheduleFreeRAdam,SCION,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SOAP,SopihaH,SPAM,SRMM,StableAdamW,SWATS,TAM,Tiger,TRAC,WSAM,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge,bitsandbytes,WSD,QGaLore
|
|
7
7
|
Author: kozistr
|
|
8
8
|
Author-email: kozistr@gmail.com
|
|
9
9
|
Maintainer: kozistr
|
|
@@ -48,7 +48,7 @@ Description-Content-Type: text/markdown
|
|
|
48
48
|
|
|
49
49
|
## The reasons why you use `pytorch-optimizer`.
|
|
50
50
|
|
|
51
|
-
* Wide range of supported optimizers. Currently, **
|
|
51
|
+
* Wide range of supported optimizers. Currently, **99 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
|
|
52
52
|
* Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
|
|
53
53
|
* Easy to use, clean, and tested codes
|
|
54
54
|
* Active maintenance
|
|
@@ -244,6 +244,7 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
244
244
|
| EXAdam | *The Power of Adaptive Cross-Moments* | [github](https://github.com/AhmedMostafa16/EXAdam) | <https://arxiv.org/abs/2412.20302> | [cite](https://github.com/AhmedMostafa16/EXAdam?tab=readme-ov-file#citation) |
|
|
245
245
|
| GCSAM | *Gradient Centralized Sharpness Aware Minimization* | [github](https://github.com/mhassann22/GCSAM) | <https://arxiv.org/abs/2501.11584> | [cite](https://github.com/mhassann22/GCSAM?tab=readme-ov-file#citation) |
|
|
246
246
|
| LookSAM | *Towards Efficient and Scalable Sharpness-Aware Minimization* | [github](https://github.com/rollovd/LookSAM) | <https://arxiv.org/abs/2203.02714> | [cite](https://ui.adsabs.harvard.edu/abs/2022arXiv220302714L/exportcitation) |
|
|
247
|
+
| SCION | *Training Deep Learning Models with Norm-Constrained LMOs* | | <https://arxiv.org/abs/2502.07529> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250207529P/exportcitation) |
|
|
247
248
|
|
|
248
249
|
## Supported LR Scheduler
|
|
249
250
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
## The reasons why you use `pytorch-optimizer`.
|
|
12
12
|
|
|
13
|
-
* Wide range of supported optimizers. Currently, **
|
|
13
|
+
* Wide range of supported optimizers. Currently, **99 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
|
|
14
14
|
* Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
|
|
15
15
|
* Easy to use, clean, and tested codes
|
|
16
16
|
* Active maintenance
|
|
@@ -206,6 +206,7 @@ get_supported_optimizers(['adam*', 'ranger*'])
|
|
|
206
206
|
| EXAdam | *The Power of Adaptive Cross-Moments* | [github](https://github.com/AhmedMostafa16/EXAdam) | <https://arxiv.org/abs/2412.20302> | [cite](https://github.com/AhmedMostafa16/EXAdam?tab=readme-ov-file#citation) |
|
|
207
207
|
| GCSAM | *Gradient Centralized Sharpness Aware Minimization* | [github](https://github.com/mhassann22/GCSAM) | <https://arxiv.org/abs/2501.11584> | [cite](https://github.com/mhassann22/GCSAM?tab=readme-ov-file#citation) |
|
|
208
208
|
| LookSAM | *Towards Efficient and Scalable Sharpness-Aware Minimization* | [github](https://github.com/rollovd/LookSAM) | <https://arxiv.org/abs/2203.02714> | [cite](https://ui.adsabs.harvard.edu/abs/2022arXiv220302714L/exportcitation) |
|
|
209
|
+
| SCION | *Training Deep Learning Models with Norm-Constrained LMOs* | | <https://arxiv.org/abs/2502.07529> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250207529P/exportcitation) |
|
|
209
210
|
|
|
210
211
|
## Supported LR Scheduler
|
|
211
212
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "pytorch_optimizer"
|
|
3
|
-
version = "3.4.
|
|
3
|
+
version = "3.4.2"
|
|
4
4
|
description = "optimizer & lr scheduler & objective function collections in PyTorch"
|
|
5
5
|
license = "Apache-2.0"
|
|
6
6
|
authors = ["kozistr <kozistr@gmail.com>"]
|
|
@@ -18,10 +18,10 @@ keywords = [
|
|
|
18
18
|
"GrokFast", "GSAM", "Kate", "Lamb", "LaProp", "LARS", "Lion", "LOMO", "Lookahead", "MADGRAD", "MARS", "MSVAG",
|
|
19
19
|
"Muno", "Nero", "NovoGrad", "OrthoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "PSGD", "QHAdam", "QHM",
|
|
20
20
|
"RAdam", "Ranger", "Ranger21", "RotoGrad", "SAM", "GCSAM", "LookSAM", "ScheduleFreeSGD", "ScheduleFreeAdamW",
|
|
21
|
-
"ScheduleFreeRAdam", "SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SOAP", "SopihaH",
|
|
22
|
-
"SRMM", "StableAdamW", "SWATS", "TAM", "Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal", "Focal",
|
|
23
|
-
"SoftF1", "Dice", "LDAM", "Jaccard", "Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge",
|
|
24
|
-
"QGaLore",
|
|
21
|
+
"ScheduleFreeRAdam", "SCION", "SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SOAP", "SopihaH",
|
|
22
|
+
"SPAM", "SRMM", "StableAdamW", "SWATS", "TAM", "Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal", "Focal",
|
|
23
|
+
"FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard", "Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge",
|
|
24
|
+
"bitsandbytes", "WSD", "QGaLore",
|
|
25
25
|
]
|
|
26
26
|
classifiers = [
|
|
27
27
|
"License :: OSI Approved :: Apache Software License",
|
|
@@ -81,6 +81,7 @@ from pytorch_optimizer.optimizer.ranger21 import Ranger21
|
|
|
81
81
|
from pytorch_optimizer.optimizer.rotograd import RotoGrad
|
|
82
82
|
from pytorch_optimizer.optimizer.sam import BSAM, GSAM, SAM, WSAM, LookSAM
|
|
83
83
|
from pytorch_optimizer.optimizer.schedulefree import ScheduleFreeAdamW, ScheduleFreeRAdam, ScheduleFreeSGD
|
|
84
|
+
from pytorch_optimizer.optimizer.scion import SCION
|
|
84
85
|
from pytorch_optimizer.optimizer.sgd import ASGD, SGDW, AccSGD, SGDSaI, SignSGD
|
|
85
86
|
from pytorch_optimizer.optimizer.sgdp import SGDP
|
|
86
87
|
from pytorch_optimizer.optimizer.shampoo import ScalableShampoo, Shampoo
|
|
@@ -300,6 +301,7 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
|
|
|
300
301
|
SPAM,
|
|
301
302
|
Kron,
|
|
302
303
|
EXAdam,
|
|
304
|
+
SCION,
|
|
303
305
|
Ranger25,
|
|
304
306
|
]
|
|
305
307
|
OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/schedulefree.py
RENAMED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import math
|
|
2
1
|
from typing import List
|
|
3
2
|
|
|
4
3
|
import torch
|
|
@@ -15,8 +14,6 @@ class ScheduleFreeSGD(BaseOptimizer):
|
|
|
15
14
|
:param lr: float. learning rate.
|
|
16
15
|
:param momentum: float. momentum factor, must be between 0 and 1 exclusive.
|
|
17
16
|
:param weight_decay: float. weight decay (L2 penalty).
|
|
18
|
-
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
19
|
-
:param fixed_decay: bool. fix weight decay.
|
|
20
17
|
:param r: float. use polynomial weighting in the average with power r.
|
|
21
18
|
:param weight_lr_power: float. during warmup, the weights in the average will be equal to lr raised to this power.
|
|
22
19
|
set to 0 for no weighting.
|
|
@@ -30,8 +27,6 @@ class ScheduleFreeSGD(BaseOptimizer):
|
|
|
30
27
|
lr: float = 1.0,
|
|
31
28
|
momentum: float = 0.9,
|
|
32
29
|
weight_decay: float = 0.0,
|
|
33
|
-
weight_decouple: bool = True,
|
|
34
|
-
fixed_decay: bool = False,
|
|
35
30
|
r: float = 0.0,
|
|
36
31
|
weight_lr_power: float = 2.0,
|
|
37
32
|
warmup_steps: int = 0,
|
|
@@ -47,8 +42,6 @@ class ScheduleFreeSGD(BaseOptimizer):
|
|
|
47
42
|
'lr': lr,
|
|
48
43
|
'momentum': momentum,
|
|
49
44
|
'weight_decay': weight_decay,
|
|
50
|
-
'weight_decouple': weight_decouple,
|
|
51
|
-
'fixed_decay': fixed_decay,
|
|
52
45
|
'r': r,
|
|
53
46
|
'weight_lr_power': weight_lr_power,
|
|
54
47
|
'warmup_steps': warmup_steps,
|
|
@@ -114,7 +107,7 @@ class ScheduleFreeSGD(BaseOptimizer):
|
|
|
114
107
|
lr: float = group['lr'] * schedule
|
|
115
108
|
lr_max = group['lr_max'] = max(lr, group['lr_max'])
|
|
116
109
|
|
|
117
|
-
weight = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
110
|
+
weight: float = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
118
111
|
weight_sum = group['weight_sum'] = group['weight_sum'] + weight
|
|
119
112
|
|
|
120
113
|
checkpoint: float = weight / weight_sum if weight_sum != 0.0 else 0.0
|
|
@@ -137,8 +130,8 @@ class ScheduleFreeSGD(BaseOptimizer):
|
|
|
137
130
|
grad=grad,
|
|
138
131
|
lr=lr,
|
|
139
132
|
weight_decay=group['weight_decay'],
|
|
140
|
-
weight_decouple=
|
|
141
|
-
fixed_decay=
|
|
133
|
+
weight_decouple=False,
|
|
134
|
+
fixed_decay=False,
|
|
142
135
|
)
|
|
143
136
|
|
|
144
137
|
z = state['z']
|
|
@@ -158,8 +151,6 @@ class ScheduleFreeAdamW(BaseOptimizer):
|
|
|
158
151
|
:param lr: float. learning rate.
|
|
159
152
|
:param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
|
|
160
153
|
:param weight_decay: float. weight decay (L2 penalty).
|
|
161
|
-
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
162
|
-
:param fixed_decay: bool. fix weight decay.
|
|
163
154
|
:param r: float. use polynomial weighting in the average with power r.
|
|
164
155
|
:param weight_lr_power: float. during warmup, the weights in the average will be equal to lr raised to this power.
|
|
165
156
|
set to 0 for no weighting.
|
|
@@ -174,8 +165,6 @@ class ScheduleFreeAdamW(BaseOptimizer):
|
|
|
174
165
|
lr: float = 2.5e-3,
|
|
175
166
|
betas: BETAS = (0.9, 0.999),
|
|
176
167
|
weight_decay: float = 0.0,
|
|
177
|
-
weight_decouple: bool = True,
|
|
178
|
-
fixed_decay: bool = False,
|
|
179
168
|
r: float = 0.0,
|
|
180
169
|
weight_lr_power: float = 2.0,
|
|
181
170
|
warmup_steps: int = 0,
|
|
@@ -192,8 +181,6 @@ class ScheduleFreeAdamW(BaseOptimizer):
|
|
|
192
181
|
'lr': lr,
|
|
193
182
|
'betas': betas,
|
|
194
183
|
'weight_decay': weight_decay,
|
|
195
|
-
'weight_decouple': weight_decouple,
|
|
196
|
-
'fixed_decay': fixed_decay,
|
|
197
184
|
'r': r,
|
|
198
185
|
'weight_lr_power': weight_lr_power,
|
|
199
186
|
'warmup_steps': warmup_steps,
|
|
@@ -259,22 +246,16 @@ class ScheduleFreeAdamW(BaseOptimizer):
|
|
|
259
246
|
|
|
260
247
|
beta1, beta2 = group['betas']
|
|
261
248
|
|
|
262
|
-
|
|
249
|
+
bias_correction2: float = self.debias(beta2, group['step'])
|
|
263
250
|
|
|
264
|
-
lr: float = group['lr'] * schedule
|
|
251
|
+
lr: float = group['lr'] * schedule
|
|
265
252
|
lr_max = group['lr_max'] = max(lr, group['lr_max'])
|
|
266
253
|
|
|
267
|
-
weight = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
254
|
+
weight: float = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
268
255
|
weight_sum = group['weight_sum'] = group['weight_sum'] + weight
|
|
269
256
|
|
|
270
257
|
checkpoint: float = weight / weight_sum if weight_sum != 0.0 else 0.0
|
|
271
258
|
|
|
272
|
-
if group['use_palm']:
|
|
273
|
-
beta2: float = 1.0 - group['step'] ** -0.8
|
|
274
|
-
debias: float = (1.0 - beta2) / (1.0 - beta2 ** group['step'])
|
|
275
|
-
else:
|
|
276
|
-
debias: float = beta2
|
|
277
|
-
|
|
278
259
|
for p in group['params']:
|
|
279
260
|
if p.grad is None:
|
|
280
261
|
continue
|
|
@@ -289,27 +270,27 @@ class ScheduleFreeAdamW(BaseOptimizer):
|
|
|
289
270
|
state['z'] = p.clone()
|
|
290
271
|
state['exp_avg_sq'] = torch.zeros_like(p)
|
|
291
272
|
|
|
292
|
-
self.apply_weight_decay(
|
|
293
|
-
p=p,
|
|
294
|
-
grad=grad,
|
|
295
|
-
lr=lr,
|
|
296
|
-
weight_decay=group['weight_decay'],
|
|
297
|
-
weight_decouple=group['weight_decouple'],
|
|
298
|
-
fixed_decay=group['fixed_decay'],
|
|
299
|
-
)
|
|
300
|
-
|
|
301
273
|
z, exp_avg_sq = state['z'], state['exp_avg_sq']
|
|
302
|
-
exp_avg_sq.mul_(
|
|
274
|
+
exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1.0 - beta2)
|
|
303
275
|
|
|
304
276
|
de_nom = self.apply_ams_bound(
|
|
305
277
|
ams_bound=group['ams_bound'],
|
|
306
|
-
exp_avg_sq=exp_avg_sq,
|
|
278
|
+
exp_avg_sq=exp_avg_sq.div(bias_correction2),
|
|
307
279
|
max_exp_avg_sq=state.get('max_exp_avg_sq', None),
|
|
308
280
|
eps=group['eps'],
|
|
309
281
|
)
|
|
310
282
|
|
|
311
283
|
grad.div_(de_nom)
|
|
312
284
|
|
|
285
|
+
self.apply_weight_decay(
|
|
286
|
+
p=p,
|
|
287
|
+
grad=grad,
|
|
288
|
+
lr=lr,
|
|
289
|
+
weight_decay=group['weight_decay'],
|
|
290
|
+
weight_decouple=False,
|
|
291
|
+
fixed_decay=False,
|
|
292
|
+
)
|
|
293
|
+
|
|
313
294
|
p.lerp_(z, weight=checkpoint)
|
|
314
295
|
p.add_(grad, alpha=lr * (beta1 * (1.0 - checkpoint) - 1))
|
|
315
296
|
|
|
@@ -325,12 +306,13 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
325
306
|
:param lr: float. learning rate.
|
|
326
307
|
:param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
|
|
327
308
|
:param weight_decay: float. weight decay (L2 penalty).
|
|
328
|
-
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
329
|
-
:param fixed_decay: bool. fix weight decay.
|
|
330
|
-
:param degenerated_to_sgd: float. degenerated to SGD.
|
|
331
309
|
:param r: float. use polynomial weighting in the average with power r.
|
|
332
310
|
:param weight_lr_power: float. during warmup, the weights in the average will be equal to lr raised to this power.
|
|
333
311
|
set to 0 for no weighting.
|
|
312
|
+
:param silent_sgd_phase: bool. the optimizer will not use the first SGD phase of RAdam. This means that the
|
|
313
|
+
optimizer will not update model parameters during the early training steps (e.g., < 5 when β_2 = 0.999), but
|
|
314
|
+
just update the momentum values of the optimizer. This helps stabilize training by ensuring smoother warmup
|
|
315
|
+
behavior and more reliable calculation of the moving average coefficient (`ckp1`). Recommended to set to True.
|
|
334
316
|
:param eps: float. term added to the denominator to improve numerical stability.
|
|
335
317
|
"""
|
|
336
318
|
|
|
@@ -340,11 +322,9 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
340
322
|
lr: float = 2.5e-3,
|
|
341
323
|
betas: BETAS = (0.9, 0.999),
|
|
342
324
|
weight_decay: float = 0.0,
|
|
343
|
-
weight_decouple: bool = True,
|
|
344
|
-
fixed_decay: bool = False,
|
|
345
|
-
degenerated_to_sgd: bool = False,
|
|
346
325
|
r: float = 0.0,
|
|
347
326
|
weight_lr_power: float = 2.0,
|
|
327
|
+
silent_sgd_phase: bool = True,
|
|
348
328
|
eps: float = 1e-8,
|
|
349
329
|
**kwargs,
|
|
350
330
|
):
|
|
@@ -357,9 +337,7 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
357
337
|
'lr': lr,
|
|
358
338
|
'betas': betas,
|
|
359
339
|
'weight_decay': weight_decay,
|
|
360
|
-
'
|
|
361
|
-
'fixed_decay': fixed_decay,
|
|
362
|
-
'degenerated_to_sgd': degenerated_to_sgd,
|
|
340
|
+
'silent_sgd_phase': silent_sgd_phase,
|
|
363
341
|
'r': r,
|
|
364
342
|
'weight_lr_power': weight_lr_power,
|
|
365
343
|
'eps': eps,
|
|
@@ -418,7 +396,7 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
418
396
|
|
|
419
397
|
beta1, beta2 = group['betas']
|
|
420
398
|
|
|
421
|
-
|
|
399
|
+
bias_correction2: float = self.debias_beta(beta2, group['step'])
|
|
422
400
|
|
|
423
401
|
lr, n_sma = self.get_rectify_step_size(
|
|
424
402
|
is_rectify=True,
|
|
@@ -426,24 +404,20 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
426
404
|
lr=group['lr'],
|
|
427
405
|
beta2=beta2,
|
|
428
406
|
n_sma_threshold=4,
|
|
429
|
-
degenerated_to_sgd=
|
|
407
|
+
degenerated_to_sgd=False,
|
|
430
408
|
)
|
|
409
|
+
if lr < 0.0:
|
|
410
|
+
lr = float(not group['silent_sgd_phase'])
|
|
431
411
|
|
|
432
412
|
lr_max = group['lr_max'] = max(lr, group['lr_max'])
|
|
433
413
|
|
|
434
|
-
weight = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
414
|
+
weight: float = (group['step'] ** group['r']) * (lr_max ** group['weight_lr_power'])
|
|
435
415
|
weight_sum = group['weight_sum'] = group['weight_sum'] + weight
|
|
436
416
|
|
|
437
417
|
checkpoint: float = weight / weight_sum if weight_sum != 0.0 else 0.0
|
|
438
418
|
|
|
439
419
|
adaptive_y_lr: float = lr * (beta1 * (1.0 - checkpoint) - 1.0)
|
|
440
420
|
|
|
441
|
-
if group['use_palm']:
|
|
442
|
-
beta2: float = 1.0 - group['step'] ** -0.8
|
|
443
|
-
debias: float = (1.0 - beta2) / (1.0 - beta2 ** group['step'])
|
|
444
|
-
else:
|
|
445
|
-
debias: float = beta2
|
|
446
|
-
|
|
447
421
|
for p in group['params']:
|
|
448
422
|
if p.grad is None:
|
|
449
423
|
continue
|
|
@@ -459,10 +433,10 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
459
433
|
state['exp_avg_sq'] = torch.zeros_like(p)
|
|
460
434
|
|
|
461
435
|
z, exp_avg_sq = state['z'], state['exp_avg_sq']
|
|
462
|
-
exp_avg_sq.mul_(
|
|
436
|
+
exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1.0 - beta2)
|
|
463
437
|
|
|
464
438
|
if n_sma > 4.0:
|
|
465
|
-
de_nom = exp_avg_sq.sqrt().div_(
|
|
439
|
+
de_nom = exp_avg_sq.sqrt().div_(bias_correction2).add_(group['eps'])
|
|
466
440
|
grad.div_(de_nom)
|
|
467
441
|
|
|
468
442
|
self.apply_weight_decay(
|
|
@@ -470,8 +444,8 @@ class ScheduleFreeRAdam(BaseOptimizer):
|
|
|
470
444
|
grad=grad,
|
|
471
445
|
lr=lr,
|
|
472
446
|
weight_decay=group['weight_decay'],
|
|
473
|
-
weight_decouple=
|
|
474
|
-
fixed_decay=
|
|
447
|
+
weight_decouple=False,
|
|
448
|
+
fixed_decay=False,
|
|
475
449
|
)
|
|
476
450
|
|
|
477
451
|
p.lerp_(z, weight=checkpoint)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
from typing import Literal
|
|
2
|
+
|
|
3
|
+
import torch
|
|
4
|
+
|
|
5
|
+
from pytorch_optimizer.base.exception import NoSparseGradientError
|
|
6
|
+
from pytorch_optimizer.base.optimizer import BaseOptimizer
|
|
7
|
+
from pytorch_optimizer.base.type import CLOSURE, DEFAULTS, LOSS, PARAMETERS
|
|
8
|
+
from pytorch_optimizer.optimizer.shampoo_utils import zero_power_via_newton_schulz_5
|
|
9
|
+
|
|
10
|
+
LMO_TYPE = Literal['spectral', 'sign', 'col_norm', 'row_norm']
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class SCION(BaseOptimizer):
|
|
14
|
+
r"""Training Deep Learning Models with Norm-Constrained LMOs.
|
|
15
|
+
|
|
16
|
+
:param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
|
|
17
|
+
:param lr: float. learning rate.
|
|
18
|
+
:param momentum: float. momentum factor.
|
|
19
|
+
:param constraint: bool. whether to use a constraint SCG or not.
|
|
20
|
+
:param lmo_type: LMO_TYPE. supported LMO types.
|
|
21
|
+
:param weight_decay: float. weight decay (L2 penalty).
|
|
22
|
+
:param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
def __init__(
|
|
26
|
+
self,
|
|
27
|
+
params: PARAMETERS,
|
|
28
|
+
lr: float = 1e-4,
|
|
29
|
+
momentum: float = 0.1,
|
|
30
|
+
constraint: bool = False,
|
|
31
|
+
lmo_type: LMO_TYPE = 'spectral',
|
|
32
|
+
weight_decay: float = 0.0,
|
|
33
|
+
weight_decouple: bool = True,
|
|
34
|
+
**kwargs,
|
|
35
|
+
):
|
|
36
|
+
self.validate_learning_rate(lr)
|
|
37
|
+
self.validate_range(momentum, 'momentum', 0.0, 1.0, '(]')
|
|
38
|
+
self.validate_options(lmo_type, 'lmo_type', ['spectral', 'sign', 'col_norm', 'row_norm'])
|
|
39
|
+
|
|
40
|
+
defaults: DEFAULTS = {
|
|
41
|
+
'lr': lr,
|
|
42
|
+
'momentum': momentum,
|
|
43
|
+
'constraint': constraint,
|
|
44
|
+
'lmo_type': lmo_type,
|
|
45
|
+
'weight_decay': weight_decay,
|
|
46
|
+
'weight_decouple': weight_decouple,
|
|
47
|
+
}
|
|
48
|
+
super().__init__(params, defaults)
|
|
49
|
+
|
|
50
|
+
def __str__(self) -> str:
|
|
51
|
+
return 'SCION'
|
|
52
|
+
|
|
53
|
+
@torch.no_grad()
|
|
54
|
+
def reset(self):
|
|
55
|
+
for group in self.param_groups:
|
|
56
|
+
for p in group['params']:
|
|
57
|
+
state = self.state[p]
|
|
58
|
+
state['d'] = torch.zeros_like(p)
|
|
59
|
+
|
|
60
|
+
@staticmethod
|
|
61
|
+
def get_lmo_direction(grad: torch.Tensor, lmo_type: str) -> torch.Tensor:
|
|
62
|
+
r"""Get LMO direction."""
|
|
63
|
+
if lmo_type == 'spectral' and grad.ndim == 2:
|
|
64
|
+
return zero_power_via_newton_schulz_5(grad)
|
|
65
|
+
if lmo_type == 'sign':
|
|
66
|
+
return torch.sign(grad)
|
|
67
|
+
if lmo_type == 'col_norm':
|
|
68
|
+
return grad / torch.norm(grad, dim=0, keepdim=True).add_(1e-6)
|
|
69
|
+
if lmo_type == 'row_norm' and grad.ndim == 2:
|
|
70
|
+
return grad / torch.norm(grad, dim=1, keepdim=True).add_(1e-6)
|
|
71
|
+
return torch.sign(grad)
|
|
72
|
+
|
|
73
|
+
@torch.no_grad()
|
|
74
|
+
def step(self, closure: CLOSURE = None) -> LOSS:
|
|
75
|
+
loss: LOSS = None
|
|
76
|
+
if closure is not None:
|
|
77
|
+
with torch.enable_grad():
|
|
78
|
+
loss = closure()
|
|
79
|
+
|
|
80
|
+
for group in self.param_groups:
|
|
81
|
+
step_size: float = -group['lr']
|
|
82
|
+
for p in group['params']:
|
|
83
|
+
if p.grad is None:
|
|
84
|
+
continue
|
|
85
|
+
|
|
86
|
+
grad = p.grad
|
|
87
|
+
if grad.is_sparse:
|
|
88
|
+
raise NoSparseGradientError(str(self))
|
|
89
|
+
|
|
90
|
+
state = self.state[p]
|
|
91
|
+
if 'd' not in state:
|
|
92
|
+
state['d'] = torch.zeros_like(p)
|
|
93
|
+
|
|
94
|
+
d = state['d']
|
|
95
|
+
d.mul_(1.0 - group['momentum']).add_(grad, alpha=group['momentum'])
|
|
96
|
+
|
|
97
|
+
update = self.get_lmo_direction(d, group['lmo_type'])
|
|
98
|
+
|
|
99
|
+
if not group['constraint']:
|
|
100
|
+
self.apply_weight_decay(
|
|
101
|
+
p,
|
|
102
|
+
grad,
|
|
103
|
+
lr=group['lr'],
|
|
104
|
+
weight_decay=group['weight_decay'],
|
|
105
|
+
weight_decouple=group['weight_decouple'],
|
|
106
|
+
fixed_decay=False,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
p.add_(update, alpha=step_size)
|
|
110
|
+
else:
|
|
111
|
+
p.mul_(1.0 - step_size).add_(update, alpha=step_size)
|
|
112
|
+
|
|
113
|
+
return loss
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/__init__.py
RENAMED
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/chebyshev.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py
RENAMED
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/proportion.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adabelief.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adafactor.py
RENAMED
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adahessian.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adam_mini.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adasmooth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/galore_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lookahead.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/orthograd.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/psgd_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pytorch_optimizer-3.4.1 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/shampoo_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|