pytorch-optimizer 3.4.0__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.
Files changed (122) hide show
  1. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/PKG-INFO +9 -6
  2. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/README.md +5 -1
  3. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pyproject.toml +11 -9
  4. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/__init__.py +2 -0
  5. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/exception.py +5 -5
  6. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/optimizer.py +2 -2
  7. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/dice.py +1 -1
  8. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/jaccard.py +1 -1
  9. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/__init__.py +1 -1
  10. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +1 -1
  11. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/__init__.py +14 -5
  12. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/a2grad.py +1 -1
  13. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adabelief.py +1 -1
  14. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adabound.py +1 -1
  15. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adadelta.py +1 -1
  16. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adafactor.py +1 -1
  17. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adahessian.py +1 -1
  18. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adai.py +2 -2
  19. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adalite.py +1 -1
  20. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adam_mini.py +1 -1
  21. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamax.py +1 -1
  22. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamg.py +1 -1
  23. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamod.py +1 -1
  24. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamp.py +2 -2
  25. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adams.py +1 -1
  26. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adamw.py +1 -1
  27. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adan.py +2 -2
  28. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adanorm.py +1 -1
  29. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adapnm.py +1 -1
  30. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adashift.py +1 -1
  31. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adasmooth.py +1 -1
  32. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ademamix.py +1 -1
  33. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/adopt.py +6 -5
  34. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/agc.py +6 -6
  35. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/aggmo.py +1 -1
  36. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/aida.py +1 -1
  37. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/alig.py +1 -1
  38. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/amos.py +1 -1
  39. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/apollo.py +1 -1
  40. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/avagrad.py +1 -1
  41. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/came.py +1 -1
  42. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/dadapt.py +1 -1
  43. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/demo.py +1 -1
  44. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/diffgrad.py +1 -1
  45. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/exadam.py +1 -1
  46. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/experimental/ranger25.py +30 -8
  47. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fadam.py +1 -1
  48. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/focus.py +1 -1
  49. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fp16.py +1 -1
  50. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/fromage.py +1 -1
  51. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ftrl.py +1 -1
  52. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/galore.py +1 -1
  53. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/grams.py +1 -1
  54. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/gravity.py +1 -1
  55. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/grokfast.py +1 -1
  56. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/kate.py +1 -1
  57. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lamb.py +1 -1
  58. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/laprop.py +1 -1
  59. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lars.py +1 -1
  60. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lion.py +2 -2
  61. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lomo.py +2 -2
  62. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/lookahead.py +6 -6
  63. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/madgrad.py +1 -1
  64. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/mars.py +1 -1
  65. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/msvag.py +1 -1
  66. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/muon.py +1 -1
  67. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/nero.py +1 -1
  68. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/novograd.py +1 -1
  69. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/orthograd.py +5 -5
  70. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/padam.py +1 -1
  71. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pid.py +1 -1
  72. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pnm.py +1 -1
  73. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/prodigy.py +1 -1
  74. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/psgd.py +1 -1
  75. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/qhadam.py +1 -1
  76. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/qhm.py +1 -1
  77. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/radam.py +1 -1
  78. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ranger.py +3 -3
  79. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/ranger21.py +3 -3
  80. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sam.py +196 -4
  81. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/schedulefree.py +33 -61
  82. pytorch_optimizer-3.4.2/pytorch_optimizer/optimizer/scion.py +113 -0
  83. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sgd.py +2 -2
  84. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sgdp.py +1 -1
  85. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/shampoo.py +2 -2
  86. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/shampoo_utils.py +2 -2
  87. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sm3.py +1 -1
  88. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/soap.py +1 -1
  89. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/sophia.py +1 -1
  90. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/spam.py +6 -6
  91. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/srmm.py +1 -1
  92. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/swats.py +1 -1
  93. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/tam.py +1 -1
  94. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/tiger.py +1 -1
  95. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/trac.py +4 -4
  96. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/utils.py +1 -1
  97. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/yogi.py +1 -1
  98. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/LICENSE +0 -0
  99. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/__init__.py +0 -0
  100. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/base/scheduler.py +0 -0
  101. /pytorch_optimizer-3.4.0/pytorch_optimizer/base/types.py → /pytorch_optimizer-3.4.2/pytorch_optimizer/base/type.py +0 -0
  102. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/__init__.py +0 -0
  103. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/bi_tempered.py +0 -0
  104. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/cross_entropy.py +0 -0
  105. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/f1.py +0 -0
  106. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/focal.py +0 -0
  107. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/ldam.py +0 -0
  108. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/lovasz.py +0 -0
  109. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/loss/tversky.py +0 -0
  110. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
  111. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
  112. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  113. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
  114. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
  115. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/rex.py +0 -0
  116. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/lr_scheduler/wsd.py +0 -0
  117. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
  118. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/galore_utils.py +0 -0
  119. /pytorch_optimizer-3.4.0/pytorch_optimizer/optimizer/gc.py → /pytorch_optimizer-3.4.2/pytorch_optimizer/optimizer/gradient_centralization.py +0 -0
  120. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/pcgrad.py +0 -0
  121. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/psgd_utils.py +0 -0
  122. {pytorch_optimizer-3.4.0 → pytorch_optimizer-3.4.2}/pytorch_optimizer/optimizer/rotograd.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pytorch_optimizer
3
- Version: 3.4.0
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,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
@@ -22,8 +22,6 @@ Classifier: Programming Language :: Python :: 3.10
22
22
  Classifier: Programming Language :: Python :: 3.11
23
23
  Classifier: Programming Language :: Python :: 3.12
24
24
  Classifier: Programming Language :: Python :: 3.13
25
- Classifier: Programming Language :: Python :: 3.6
26
- Classifier: Programming Language :: Python :: 3.7
27
25
  Classifier: Topic :: Scientific/Engineering
28
26
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
29
27
  Classifier: Topic :: Software Development
@@ -31,7 +29,8 @@ Classifier: Topic :: Software Development :: Libraries
31
29
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
32
30
  Requires-Dist: numpy (<=1.24.4) ; python_version < "3.9"
33
31
  Requires-Dist: numpy (>1.24.4) ; python_version >= "3.9"
34
- Requires-Dist: torch (>=1.10) ; python_version >= "3.8"
32
+ Requires-Dist: torch (>=1.10) ; python_version >= "3.9"
33
+ Requires-Dist: torch (>=1.10,<2.5) ; python_version < "3.9"
35
34
  Project-URL: Documentation, https://pytorch-optimizers.readthedocs.io/en/latest
36
35
  Project-URL: Homepage, https://github.com/kozistr/pytorch_optimizer
37
36
  Project-URL: Repository, https://github.com/kozistr/pytorch_optimizer
@@ -49,7 +48,7 @@ Description-Content-Type: text/markdown
49
48
 
50
49
  ## The reasons why you use `pytorch-optimizer`.
51
50
 
52
- * Wide range of supported optimizers. Currently, **95 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
51
+ * Wide range of supported optimizers. Currently, **99 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
53
52
  * Including many variants such as `ADOPT`, `Cautious`, `AdamD`, `StableAdamW`, and `Gradient Centrailiaztion`
54
53
  * Easy to use, clean, and tested codes
55
54
  * Active maintenance
@@ -118,6 +117,7 @@ optimizer = create_optimizer(
118
117
  weight_decay=1e-3,
119
118
  use_gc=True,
120
119
  use_lookahead=True,
120
+ use_orthograd=False,
121
121
  )
122
122
  ```
123
123
 
@@ -242,6 +242,9 @@ get_supported_optimizers(['adam*', 'ranger*'])
242
242
  | FOCUS | *First Order Concentrated Updating Scheme* | [github](https://github.com/liuyz0/FOCUS) | <https://arxiv.org/abs/2501.12243> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250112243M/exportcitation) |
243
243
  | PSGD | *Preconditioned Stochastic Gradient Descent* | [github](https://github.com/lixilinx/psgd_torch) | <https://arxiv.org/abs/1512.04202> | [cite](https://github.com/lixilinx/psgd_torch?tab=readme-ov-file#resources) |
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
+ | 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
+ | 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) |
245
248
 
246
249
  ## Supported LR Scheduler
247
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, **95 optimizers (+ `bitsandbytes`, `qgalore`, `torchao`)**, **16 lr schedulers**, and **13 loss functions** are supported!
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
@@ -79,6 +79,7 @@ optimizer = create_optimizer(
79
79
  weight_decay=1e-3,
80
80
  use_gc=True,
81
81
  use_lookahead=True,
82
+ use_orthograd=False,
82
83
  )
83
84
  ```
84
85
 
@@ -203,6 +204,9 @@ get_supported_optimizers(['adam*', 'ranger*'])
203
204
  | FOCUS | *First Order Concentrated Updating Scheme* | [github](https://github.com/liuyz0/FOCUS) | <https://arxiv.org/abs/2501.12243> | [cite](https://ui.adsabs.harvard.edu/abs/2025arXiv250112243M/exportcitation) |
204
205
  | PSGD | *Preconditioned Stochastic Gradient Descent* | [github](https://github.com/lixilinx/psgd_torch) | <https://arxiv.org/abs/1512.04202> | [cite](https://github.com/lixilinx/psgd_torch?tab=readme-ov-file#resources) |
205
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
+ | 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
+ | 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) |
206
210
 
207
211
  ## Supported LR Scheduler
208
212
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pytorch_optimizer"
3
- version = "3.4.0"
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>"]
@@ -17,10 +17,11 @@ keywords = [
17
17
  "DAdaptLion", "DeMo", "DiffGrad", "EXAdam", "FAdam", "FOCUS", "Fromage", "FTRL", "GaLore", "Grams", "Gravity",
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
- "RAdam", "Ranger", "Ranger21", "RotoGrad", "SAM", "ScheduleFreeSGD", "ScheduleFreeAdamW", "ScheduleFreeRAdam",
21
- "SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SOAP", "SopihaH", "SPAM", "SRMM", "StableAdamW",
22
- "SWATS", "TAM", "Tiger", "TRAC", "WSAM", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice",
23
- "LDAM", "Jaccard", "Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge", "bitsandbytes", "WSD", "QGaLore",
20
+ "RAdam", "Ranger", "Ranger21", "RotoGrad", "SAM", "GCSAM", "LookSAM", "ScheduleFreeSGD", "ScheduleFreeAdamW",
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",
24
25
  ]
25
26
  classifiers = [
26
27
  "License :: OSI Approved :: Apache Software License",
@@ -29,8 +30,6 @@ classifiers = [
29
30
  "Intended Audience :: Developers",
30
31
  "Intended Audience :: Science/Research",
31
32
  "Programming Language :: Python :: 3",
32
- "Programming Language :: Python :: 3.6",
33
- "Programming Language :: Python :: 3.7",
34
33
  "Programming Language :: Python :: 3.8",
35
34
  "Programming Language :: Python :: 3.9",
36
35
  "Programming Language :: Python :: 3.10",
@@ -51,7 +50,10 @@ numpy = [
51
50
  { version = ">1.24.4", python = ">=3.9" },
52
51
  { version = "<=1.24.4", python = "<3.9" },
53
52
  ]
54
- torch = { version = ">=1.10", python = ">=3.8", source = "torch" }
53
+ torch = [
54
+ { version = ">=1.10,<2.5", python = "<3.9", source = "torch" },
55
+ { version = ">=1.10", python = ">=3.9", source = "torch" },
56
+ ]
55
57
 
56
58
  [tool.poetry.group.dev.dependencies]
57
59
  isort = [
@@ -95,7 +97,7 @@ select = [
95
97
  "TID", "ARG", "ERA", "RUF", "YTT", "PL", "Q"
96
98
  ]
97
99
  ignore = [
98
- "A005", "B905",
100
+ "B905",
99
101
  "D100", "D102", "D104", "D105", "D107", "D203", "D213", "D413",
100
102
  "PLR0912", "PLR0913", "PLR0915", "PLR2004",
101
103
  "Q003", "ARG002",
@@ -58,6 +58,7 @@ from pytorch_optimizer.optimizer import (
58
58
  PNM,
59
59
  QHM,
60
60
  SAM,
61
+ SCION,
61
62
  SGDP,
62
63
  SGDW,
63
64
  SM3,
@@ -119,6 +120,7 @@ from pytorch_optimizer.optimizer import (
119
120
  LaProp,
120
121
  Lion,
121
122
  Lookahead,
123
+ LookSAM,
122
124
  Muon,
123
125
  Nero,
124
126
  NovoGrad,
@@ -7,7 +7,7 @@ class NoSparseGradientError(Exception):
7
7
 
8
8
  def __init__(self, optimizer_name: str, note: str = ''):
9
9
  self.note: str = ' ' if not note else f' w/ {note} '
10
- self.message: str = f'[-] {optimizer_name}{self.note}does not support sparse gradient.'
10
+ self.message: str = f'{optimizer_name}{self.note}does not support sparse gradient.'
11
11
  super().__init__(self.message)
12
12
 
13
13
 
@@ -15,7 +15,7 @@ class ZeroParameterSizeError(Exception):
15
15
  """Raised when the parameter size is 0."""
16
16
 
17
17
  def __init__(self):
18
- self.message: str = '[-] parameter size is 0'
18
+ self.message: str = 'parameter size is 0'
19
19
  super().__init__(self.message)
20
20
 
21
21
 
@@ -23,7 +23,7 @@ class NoClosureError(Exception):
23
23
  """Raised when there's no closure function."""
24
24
 
25
25
  def __init__(self, optimizer_name: str, note: str = ''):
26
- self.message: str = f'[-] {optimizer_name} requires closure.{note}'
26
+ self.message: str = f'{optimizer_name} requires closure.{note}'
27
27
  super().__init__(self.message)
28
28
 
29
29
 
@@ -32,7 +32,7 @@ class NegativeLRError(Exception):
32
32
 
33
33
  def __init__(self, lr: float, lr_type: str = ''):
34
34
  self.note: str = lr_type if lr_type else 'learning rate'
35
- self.message: str = f'[-] {self.note} must be positive. ({lr} > 0)'
35
+ self.message: str = f'{self.note} must be positive. ({lr} > 0)'
36
36
  super().__init__(self.message)
37
37
 
38
38
 
@@ -41,5 +41,5 @@ class NegativeStepError(Exception):
41
41
 
42
42
  def __init__(self, num_steps: int, step_type: str = ''):
43
43
  self.note: str = step_type if step_type else 'step'
44
- self.message: str = f'[-] {self.note} must be positive. ({num_steps} > 0)'
44
+ self.message: str = f'{self.note} must be positive. ({num_steps} > 0)'
45
45
  super().__init__(self.message)
@@ -6,7 +6,7 @@ import torch
6
6
  from torch.optim import Optimizer
7
7
 
8
8
  from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
9
- from pytorch_optimizer.base.types import (
9
+ from pytorch_optimizer.base.type import (
10
10
  BETAS,
11
11
  CLOSURE,
12
12
  DEFAULTS,
@@ -103,7 +103,7 @@ class BaseOptimizer(ABC, Optimizer):
103
103
  :param distribution: HUTCHINSON_G. type of distribution.
104
104
  """
105
105
  if distribution not in ('gaussian', 'rademacher'):
106
- raise NotImplementedError(f'[-] Hessian with distribution {distribution} is not implemented.')
106
+ raise NotImplementedError(f'hessian with distribution {distribution} is not implemented.')
107
107
 
108
108
  params: List[torch.Tensor] = [
109
109
  p
@@ -4,7 +4,7 @@ import torch
4
4
  from torch.nn.functional import logsigmoid, one_hot
5
5
  from torch.nn.modules.loss import _Loss
6
6
 
7
- from pytorch_optimizer.base.types import CLASS_MODE
7
+ from pytorch_optimizer.base.type import CLASS_MODE
8
8
 
9
9
 
10
10
  def soft_dice_score(
@@ -4,7 +4,7 @@ import torch
4
4
  from torch.nn.functional import logsigmoid, one_hot
5
5
  from torch.nn.modules.loss import _Loss
6
6
 
7
- from pytorch_optimizer.base.types import CLASS_MODE
7
+ from pytorch_optimizer.base.type import CLASS_MODE
8
8
 
9
9
 
10
10
  def soft_jaccard_score(
@@ -14,7 +14,7 @@ from torch.optim.lr_scheduler import (
14
14
  StepLR,
15
15
  )
16
16
 
17
- from pytorch_optimizer.base.types import SCHEDULER
17
+ from pytorch_optimizer.base.type import SCHEDULER
18
18
  from pytorch_optimizer.lr_scheduler.chebyshev import get_chebyshev_perm_steps, get_chebyshev_schedule
19
19
  from pytorch_optimizer.lr_scheduler.cosine_anealing import CosineAnnealingWarmupRestarts
20
20
  from pytorch_optimizer.lr_scheduler.experimental.deberta_v3_lr_scheduler import deberta_v3_large_lr_scheduler
@@ -1,6 +1,6 @@
1
1
  from torch import nn
2
2
 
3
- from pytorch_optimizer.base.types import PARAMETERS
3
+ from pytorch_optimizer.base.type import PARAMETERS
4
4
 
5
5
 
6
6
  def deberta_v3_large_lr_scheduler(
@@ -1,12 +1,13 @@
1
1
  import fnmatch
2
2
  from importlib.util import find_spec
3
- from typing import Dict, List, Optional, Sequence, Set, Type, Union
3
+ from typing import Dict, List, Optional, Sequence, Set, Union
4
+ from warnings import warn
4
5
 
5
6
  import torch
6
7
  from torch import nn
7
- from torch.optim import AdamW, Optimizer
8
+ from torch.optim import SGD, Adam, AdamW, Optimizer
8
9
 
9
- from pytorch_optimizer.base.types import OPTIMIZER, PARAMETERS
10
+ from pytorch_optimizer.base.type import OPTIMIZER, PARAMETERS
10
11
  from pytorch_optimizer.optimizer.a2grad import A2Grad
11
12
  from pytorch_optimizer.optimizer.adabelief import AdaBelief
12
13
  from pytorch_optimizer.optimizer.adabound import AdaBound
@@ -48,7 +49,7 @@ from pytorch_optimizer.optimizer.fp16 import DynamicLossScaler, SafeFP16Optimize
48
49
  from pytorch_optimizer.optimizer.fromage import Fromage
49
50
  from pytorch_optimizer.optimizer.ftrl import FTRL
50
51
  from pytorch_optimizer.optimizer.galore import GaLore
51
- from pytorch_optimizer.optimizer.gc import centralize_gradient
52
+ from pytorch_optimizer.optimizer.gradient_centralization import centralize_gradient
52
53
  from pytorch_optimizer.optimizer.grams import Grams
53
54
  from pytorch_optimizer.optimizer.gravity import Gravity
54
55
  from pytorch_optimizer.optimizer.grokfast import GrokFastAdamW
@@ -78,8 +79,9 @@ from pytorch_optimizer.optimizer.radam import RAdam
78
79
  from pytorch_optimizer.optimizer.ranger import Ranger
79
80
  from pytorch_optimizer.optimizer.ranger21 import Ranger21
80
81
  from pytorch_optimizer.optimizer.rotograd import RotoGrad
81
- from pytorch_optimizer.optimizer.sam import BSAM, GSAM, SAM, WSAM
82
+ from pytorch_optimizer.optimizer.sam import BSAM, GSAM, SAM, WSAM, LookSAM
82
83
  from pytorch_optimizer.optimizer.schedulefree import ScheduleFreeAdamW, ScheduleFreeRAdam, ScheduleFreeSGD
84
+ from pytorch_optimizer.optimizer.scion import SCION
83
85
  from pytorch_optimizer.optimizer.sgd import ASGD, SGDW, AccSGD, SGDSaI, SignSGD
84
86
  from pytorch_optimizer.optimizer.sgdp import SGDP
85
87
  from pytorch_optimizer.optimizer.shampoo import ScalableShampoo, Shampoo
@@ -206,6 +208,8 @@ def load_optimizer(optimizer: str) -> OPTIMIZER:
206
208
 
207
209
  OPTIMIZER_LIST: List[OPTIMIZER] = [
208
210
  AdamW,
211
+ Adam,
212
+ SGD,
209
213
  AdaBelief,
210
214
  AdaBound,
211
215
  PID,
@@ -297,6 +301,7 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
297
301
  SPAM,
298
302
  Kron,
299
303
  EXAdam,
304
+ SCION,
300
305
  Ranger25,
301
306
  ]
302
307
  OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
@@ -341,6 +346,10 @@ def create_optimizer(
341
346
  optimizer = OrthoGrad(optimizer, **kwargs)
342
347
 
343
348
  if use_lookahead:
349
+ if optimizer_name in ('ranger', 'ranger21', 'ranger25'):
350
+ warn(f'{optimizer} already has a Lookahead variant.', UserWarning, 1)
351
+ return optimizer
352
+
344
353
  optimizer = Lookahead(
345
354
  optimizer,
346
355
  k=kwargs.get('k', 5),
@@ -5,7 +5,7 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
  VARIANTS = Literal['uni', 'inc', 'exp']
11
11
 
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdaBelief(BaseOptimizer):
@@ -5,7 +5,7 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
 
11
11
  class AdaBound(BaseOptimizer):
@@ -2,7 +2,7 @@ import torch
2
2
 
3
3
  from pytorch_optimizer.base.exception import NoSparseGradientError
4
4
  from pytorch_optimizer.base.optimizer import BaseOptimizer
5
- from pytorch_optimizer.base.types import CLOSURE, DEFAULTS, LOSS, PARAMETERS
5
+ from pytorch_optimizer.base.type import CLOSURE, DEFAULTS, LOSS, PARAMETERS
6
6
 
7
7
 
8
8
  class AdaDelta(BaseOptimizer):
@@ -5,7 +5,7 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
 
11
11
  class AdaFactor(BaseOptimizer):
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, HUTCHINSON_G, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, HUTCHINSON_G, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdaHessian(BaseOptimizer):
@@ -4,8 +4,8 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError, ZeroParameterSizeError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
- from pytorch_optimizer.optimizer.gc import centralize_gradient
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.optimizer.gradient_centralization import centralize_gradient
9
9
 
10
10
 
11
11
  class Adai(BaseOptimizer):
@@ -3,7 +3,7 @@ from torch.nn.functional import softmax
3
3
 
4
4
  from pytorch_optimizer.base.exception import NoSparseGradientError
5
5
  from pytorch_optimizer.base.optimizer import BaseOptimizer
6
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
6
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
7
 
8
8
 
9
9
  class Adalite(BaseOptimizer):
@@ -7,7 +7,7 @@ from torch import nn
7
7
 
8
8
  from pytorch_optimizer.base.exception import NoSparseGradientError
9
9
  from pytorch_optimizer.base.optimizer import BaseOptimizer
10
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS
10
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS
11
11
 
12
12
 
13
13
  class AdamMini(BaseOptimizer): # pragma: no cover
@@ -2,7 +2,7 @@ import torch
2
2
 
3
3
  from pytorch_optimizer.base.exception import NoSparseGradientError
4
4
  from pytorch_optimizer.base.optimizer import BaseOptimizer
5
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
5
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
6
6
 
7
7
 
8
8
  class AdaMax(BaseOptimizer):
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdamG(BaseOptimizer):
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdaMod(BaseOptimizer):
@@ -4,8 +4,8 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
- from pytorch_optimizer.optimizer.gc import centralize_gradient
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.optimizer.gradient_centralization import centralize_gradient
9
9
  from pytorch_optimizer.optimizer.utils import projection
10
10
 
11
11
 
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError, ZeroParameterSizeError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdamS(BaseOptimizer):
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class StableAdamW(BaseOptimizer):
@@ -5,8 +5,8 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
- from pytorch_optimizer.optimizer.gc import centralize_gradient
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
+ from pytorch_optimizer.optimizer.gradient_centralization import centralize_gradient
10
10
  from pytorch_optimizer.optimizer.utils import get_global_gradient_norm
11
11
 
12
12
 
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdaNorm(BaseOptimizer):
@@ -4,7 +4,7 @@ import torch
4
4
 
5
5
  from pytorch_optimizer.base.exception import NoSparseGradientError
6
6
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
7
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
8
 
9
9
 
10
10
  class AdaPNM(BaseOptimizer):
@@ -5,7 +5,7 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
 
11
11
  class AdaShift(BaseOptimizer):
@@ -2,7 +2,7 @@ import torch
2
2
 
3
3
  from pytorch_optimizer.base.exception import NoSparseGradientError
4
4
  from pytorch_optimizer.base.optimizer import BaseOptimizer
5
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
5
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
6
6
 
7
7
 
8
8
  class AdaSmooth(BaseOptimizer):
@@ -5,7 +5,7 @@ import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
 
11
11
  class AdEMAMix(BaseOptimizer):
@@ -1,11 +1,11 @@
1
1
  import math
2
- from typing import Callable, Optional
2
+ from typing import Callable
3
3
 
4
4
  import torch
5
5
 
6
6
  from pytorch_optimizer.base.exception import NoSparseGradientError
7
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
8
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
8
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
9
9
 
10
10
 
11
11
  class ADOPT(BaseOptimizer):
@@ -14,6 +14,7 @@ class ADOPT(BaseOptimizer):
14
14
  :param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
15
15
  :param lr: float. learning rate.
16
16
  :param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
17
+ :param clip_lambda: Callable[[float], float]. function to clip gradient. default is `step ** 0.25`
17
18
  :param weight_decay: float. weight decay (L2 penalty).
18
19
  :param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
19
20
  :param fixed_decay: bool. fix weight decay.
@@ -27,7 +28,7 @@ class ADOPT(BaseOptimizer):
27
28
  params: PARAMETERS,
28
29
  lr: float = 1e-3,
29
30
  betas: BETAS = (0.9, 0.9999),
30
- clip_lambda: Optional[Callable[[float], float]] = lambda step: math.pow(step, 0.25),
31
+ clip_lambda: Callable[[float], float] = lambda step: math.pow(step, 0.25),
31
32
  weight_decay: float = 0.0,
32
33
  weight_decouple: bool = False,
33
34
  fixed_decay: bool = False,
@@ -114,8 +115,6 @@ class ADOPT(BaseOptimizer):
114
115
  exp_avg_sq.addcmul_(grad, grad.conj())
115
116
  continue
116
117
 
117
- exp_avg_sq.mul_(beta2).addcmul_(grad, grad.conj(), value=1.0 - beta2)
118
-
119
118
  de_nom = exp_avg_sq.sqrt().clamp_(min=group['eps'])
120
119
 
121
120
  normed_grad = grad.div(de_nom)
@@ -136,4 +135,6 @@ class ADOPT(BaseOptimizer):
136
135
 
137
136
  p.add_(update, alpha=-lr)
138
137
 
138
+ exp_avg_sq.mul_(beta2).addcmul_(grad, grad.conj(), value=1.0 - beta2)
139
+
139
140
  return loss
@@ -3,7 +3,9 @@ import torch
3
3
  from pytorch_optimizer.optimizer.utils import unit_norm
4
4
 
5
5
 
6
- def agc(p: torch.Tensor, grad: torch.Tensor, agc_eps: float, agc_clip_val: float, eps: float = 1e-6) -> torch.Tensor:
6
+ def agc(
7
+ p: torch.Tensor, grad: torch.Tensor, agc_eps: float = 1e-3, agc_clip_val: float = 1e-2, eps: float = 1e-6
8
+ ) -> torch.Tensor:
7
9
  r"""Clip gradient values in excess of the unit wise norm.
8
10
 
9
11
  :param p: torch.Tensor. parameter.
@@ -12,11 +14,9 @@ def agc(p: torch.Tensor, grad: torch.Tensor, agc_eps: float, agc_clip_val: float
12
14
  :param agc_clip_val: float. norm clip.
13
15
  :param eps: float. simple stop from div by zero and no relation to standard optimizer eps.
14
16
  """
15
- p_norm = unit_norm(p).clamp_(agc_eps)
16
- g_norm = unit_norm(grad)
17
+ max_norm = unit_norm(p).clamp_min_(agc_eps).mul_(agc_clip_val)
18
+ g_norm = unit_norm(grad).clamp_min_(eps)
17
19
 
18
- max_norm = p_norm * agc_clip_val
19
-
20
- clipped_grad = grad * (max_norm / g_norm.clamp_min_(eps))
20
+ clipped_grad = grad * (max_norm / g_norm)
21
21
 
22
22
  return torch.where(g_norm > max_norm, clipped_grad, grad)
@@ -2,7 +2,7 @@ import torch
2
2
 
3
3
  from pytorch_optimizer.base.exception import NoSparseGradientError
4
4
  from pytorch_optimizer.base.optimizer import BaseOptimizer
5
- from pytorch_optimizer.base.types import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
5
+ from pytorch_optimizer.base.type import BETAS, CLOSURE, DEFAULTS, LOSS, PARAMETERS
6
6
 
7
7
 
8
8
  class AggMo(BaseOptimizer):