pytorch-optimizer 2.11.1__tar.gz → 2.11.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 (90) hide show
  1. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/PKG-INFO +14 -14
  2. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/README.rst +11 -11
  3. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pyproject.toml +6 -7
  4. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/__init__.py +2 -1
  5. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adabelief.py +1 -1
  6. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/dadapt.py +129 -0
  7. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/fp16.py +1 -1
  8. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/lomo.py +1 -1
  9. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/lookahead.py +15 -3
  10. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/rotograd.py +2 -2
  11. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/LICENSE +0 -0
  12. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/base/__init__.py +0 -0
  13. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/base/exception.py +0 -0
  14. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/base/optimizer.py +0 -0
  15. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/base/scheduler.py +0 -0
  16. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/base/types.py +0 -0
  17. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/__init__.py +0 -0
  18. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/bi_tempered.py +0 -0
  19. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/cross_entropy.py +0 -0
  20. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/dice.py +0 -0
  21. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/f1.py +0 -0
  22. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/focal.py +0 -0
  23. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/jaccard.py +0 -0
  24. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/ldam.py +0 -0
  25. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/lovasz.py +0 -0
  26. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/loss/tversky.py +0 -0
  27. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
  28. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/chebyshev.py +0 -0
  29. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +0 -0
  30. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  31. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +0 -0
  32. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py +0 -0
  33. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/lr_scheduler/proportion.py +0 -0
  34. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/__init__.py +0 -0
  35. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/a2grad.py +0 -0
  36. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adabound.py +0 -0
  37. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adadelta.py +0 -0
  38. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adafactor.py +0 -0
  39. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adahessian.py +0 -0
  40. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adai.py +0 -0
  41. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adamax.py +0 -0
  42. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adamod.py +0 -0
  43. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adamp.py +0 -0
  44. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adams.py +0 -0
  45. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adan.py +0 -0
  46. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adanorm.py +0 -0
  47. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adapnm.py +0 -0
  48. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adashift.py +0 -0
  49. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/adasmooth.py +0 -0
  50. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/agc.py +0 -0
  51. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/aggmo.py +0 -0
  52. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/alig.py +0 -0
  53. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/amos.py +0 -0
  54. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/apollo.py +0 -0
  55. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/avagrad.py +0 -0
  56. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/came.py +0 -0
  57. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/diffgrad.py +0 -0
  58. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/fromage.py +0 -0
  59. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/gc.py +0 -0
  60. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/gravity.py +0 -0
  61. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/gsam.py +0 -0
  62. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/lamb.py +0 -0
  63. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/lars.py +0 -0
  64. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/lion.py +0 -0
  65. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/madgrad.py +0 -0
  66. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/msvag.py +0 -0
  67. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/nero.py +0 -0
  68. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/novograd.py +0 -0
  69. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/padam.py +0 -0
  70. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/pcgrad.py +0 -0
  71. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/pid.py +0 -0
  72. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/pnm.py +0 -0
  73. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/prodigy.py +0 -0
  74. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/qhadam.py +0 -0
  75. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/qhm.py +0 -0
  76. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/radam.py +0 -0
  77. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/ranger.py +0 -0
  78. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/ranger21.py +0 -0
  79. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/sam.py +0 -0
  80. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/sgd.py +0 -0
  81. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/sgdp.py +0 -0
  82. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/shampoo.py +0 -0
  83. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/shampoo_utils.py +0 -0
  84. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/sm3.py +0 -0
  85. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/sophia.py +0 -0
  86. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/srmm.py +0 -0
  87. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/swats.py +0 -0
  88. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/tiger.py +0 -0
  89. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/utils.py +0 -0
  90. {pytorch_optimizer-2.11.1 → pytorch_optimizer-2.11.2}/pytorch_optimizer/optimizer/yogi.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.1
2
- Name: pytorch-optimizer
3
- Version: 2.11.1
2
+ Name: pytorch_optimizer
3
+ Version: 2.11.2
4
4
  Summary: optimizer & lr scheduler & objective function collections in PyTorch
5
5
  Home-page: https://github.com/kozistr/pytorch_optimizer
6
6
  License: Apache-2.0
7
- Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdaHessian,Adai,AdamP,AdamS,Adan,AggMo,AliG,Amos,Apollo,AvaGrad,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DiffGrad,Fromage,Gravity,GSAM,LARS,Lamb,Lion,LOMO,Lookahead,MADGRAD,MSVAG,Nero,NovoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SopihaH,SRMM,SWATS,Tiger,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge
7
+ Keywords: pytorch,deep-learning,optimizer,lr scheduler,A2Grad,ASGD,AccSGD,AdaBelief,AdaBound,AdaDelta,AdaFactor,AdaMax,AdaMod,AdaNorm,AdaPNM,AdaSmooth,AdaHessian,Adai,AdamP,AdamS,Adan,AggMo,AliG,Amos,Apollo,AvaGrad,CAME,DAdaptAdaGrad,DAdaptAdam,DAdaptAdan,DAdaptSGD,DAdaptLion,DiffGrad,Fromage,Gravity,GSAM,LARS,Lamb,Lion,LOMO,Lookahead,MADGRAD,MSVAG,Nero,NovoGrad,PAdam,PCGrad,PID,PNM,Prodigy,QHAdam,QHM,RAdam,Ranger,Ranger21,RotoGrad,SAM,SGDP,Shampoo,ScalableShampoo,SGDW,SignSGD,SM3,SopihaH,SRMM,SWATS,Tiger,Yogi,BCE,BCEFocal,Focal,FocalCosine,SoftF1,Dice,LDAM,Jaccard,Bi-Tempered,Tversky,FocalTversky,LovaszHinge
8
8
  Author: kozistr
9
9
  Author-email: kozistr@gmail.com
10
10
  Maintainer: kozistr
@@ -54,7 +54,7 @@ pytorch-optimizer
54
54
 
55
55
  | **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
56
56
  | I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
57
- | Currently, 59 optimizers, 10 lr schedulers, and 13 loss functions are supported!
57
+ | Currently, **60 optimizers**, **10 lr schedulers**, and **13 loss functions** are supported!
58
58
  |
59
59
  | Highly inspired by `pytorch-optimizer <https://github.com/jettify/pytorch-optimizer>`__.
60
60
 
@@ -69,20 +69,20 @@ So, please double-check the license before using it at your work.
69
69
  Installation
70
70
  ~~~~~~~~~~~~
71
71
 
72
- ::
72
+ .. code-block:: bash
73
73
 
74
74
  $ pip3 install -U pytorch-optimizer
75
75
 
76
76
  If there's a version issue when installing the package, try with `--no-deps` option.
77
77
 
78
- ::
78
+ .. code-block:: bash
79
79
 
80
80
  $ pip3 install -U --no-deps pytorch-optimizer
81
81
 
82
82
  Simple Usage
83
83
  ~~~~~~~~~~~~
84
84
 
85
- ::
85
+ .. code-block:: python
86
86
 
87
87
  from pytorch_optimizer import AdamP
88
88
 
@@ -99,7 +99,7 @@ Simple Usage
99
99
 
100
100
  Also, you can load the optimizer via `torch.hub`
101
101
 
102
- ::
102
+ .. code-block:: python
103
103
 
104
104
  import torch
105
105
 
@@ -109,7 +109,7 @@ Also, you can load the optimizer via `torch.hub`
109
109
 
110
110
  If you want to build the optimizer with parameters & configs, there's `create_optimizer()` API.
111
111
 
112
- ::
112
+ .. code-block:: python
113
113
 
114
114
  from pytorch_optimizer import create_optimizer
115
115
 
@@ -127,7 +127,7 @@ Supported Optimizers
127
127
 
128
128
  You can check the supported optimizers with below code.
129
129
 
130
- ::
130
+ .. code-block:: python
131
131
 
132
132
  from pytorch_optimizer import get_supported_optimizers
133
133
 
@@ -268,7 +268,7 @@ Supported LR Scheduler
268
268
 
269
269
  You can check the supported learning rate schedulers with below code.
270
270
 
271
- ::
271
+ .. code-block:: python
272
272
 
273
273
  from pytorch_optimizer import get_supported_lr_schedulers
274
274
 
@@ -287,7 +287,7 @@ Supported Loss Function
287
287
 
288
288
  You can check the supported loss functions with below code.
289
289
 
290
- ::
290
+ .. code-block:: python
291
291
 
292
292
  from pytorch_optimizer import get_supported_loss_functions
293
293
 
@@ -471,9 +471,9 @@ Hyeongchan Kim / `@kozistr <http://kozistr.tech/about>`__
471
471
  :target: https://pytorch-optimizers.readthedocs.io/en/latest/?badge=latest
472
472
  .. |PyPI version| image:: https://badge.fury.io/py/pytorch-optimizer.svg
473
473
  :target: https://badge.fury.io/py/pytorch-optimizer
474
- .. |PyPi download| image:: https://pepy.tech/badge/pytorch-optimizer
474
+ .. |PyPi download| image:: https://static.pepy.tech/badge/pytorch-optimizer
475
475
  :target: https://pepy.tech/project/pytorch-optimizer
476
- .. |PyPi month download| image:: https://pepy.tech/badge/pytorch-optimizer/month
476
+ .. |PyPi month download| image:: https://static.pepy.tech/badge/pytorch-optimizer/month
477
477
  :target: https://pepy.tech/project/pytorch-optimizer
478
478
  .. |PyPI pyversions| image:: https://img.shields.io/pypi/pyversions/pytorch-optimizer.svg
479
479
  :target: https://pypi.python.org/pypi/pytorch-optimizer/
@@ -16,7 +16,7 @@ pytorch-optimizer
16
16
 
17
17
  | **pytorch-optimizer** is optimizer & lr scheduler collections in PyTorch.
18
18
  | I just re-implemented (speed & memory tweaks, plug-ins) the algorithm while based on the original paper. Also, It includes useful and practical optimization ideas.
19
- | Currently, 59 optimizers, 10 lr schedulers, and 13 loss functions are supported!
19
+ | Currently, **60 optimizers**, **10 lr schedulers**, and **13 loss functions** are supported!
20
20
  |
21
21
  | Highly inspired by `pytorch-optimizer <https://github.com/jettify/pytorch-optimizer>`__.
22
22
 
@@ -31,20 +31,20 @@ So, please double-check the license before using it at your work.
31
31
  Installation
32
32
  ~~~~~~~~~~~~
33
33
 
34
- ::
34
+ .. code-block:: bash
35
35
 
36
36
  $ pip3 install -U pytorch-optimizer
37
37
 
38
38
  If there's a version issue when installing the package, try with `--no-deps` option.
39
39
 
40
- ::
40
+ .. code-block:: bash
41
41
 
42
42
  $ pip3 install -U --no-deps pytorch-optimizer
43
43
 
44
44
  Simple Usage
45
45
  ~~~~~~~~~~~~
46
46
 
47
- ::
47
+ .. code-block:: python
48
48
 
49
49
  from pytorch_optimizer import AdamP
50
50
 
@@ -61,7 +61,7 @@ Simple Usage
61
61
 
62
62
  Also, you can load the optimizer via `torch.hub`
63
63
 
64
- ::
64
+ .. code-block:: python
65
65
 
66
66
  import torch
67
67
 
@@ -71,7 +71,7 @@ Also, you can load the optimizer via `torch.hub`
71
71
 
72
72
  If you want to build the optimizer with parameters & configs, there's `create_optimizer()` API.
73
73
 
74
- ::
74
+ .. code-block:: python
75
75
 
76
76
  from pytorch_optimizer import create_optimizer
77
77
 
@@ -89,7 +89,7 @@ Supported Optimizers
89
89
 
90
90
  You can check the supported optimizers with below code.
91
91
 
92
- ::
92
+ .. code-block:: python
93
93
 
94
94
  from pytorch_optimizer import get_supported_optimizers
95
95
 
@@ -230,7 +230,7 @@ Supported LR Scheduler
230
230
 
231
231
  You can check the supported learning rate schedulers with below code.
232
232
 
233
- ::
233
+ .. code-block:: python
234
234
 
235
235
  from pytorch_optimizer import get_supported_lr_schedulers
236
236
 
@@ -249,7 +249,7 @@ Supported Loss Function
249
249
 
250
250
  You can check the supported loss functions with below code.
251
251
 
252
- ::
252
+ .. code-block:: python
253
253
 
254
254
  from pytorch_optimizer import get_supported_loss_functions
255
255
 
@@ -433,9 +433,9 @@ Hyeongchan Kim / `@kozistr <http://kozistr.tech/about>`__
433
433
  :target: https://pytorch-optimizers.readthedocs.io/en/latest/?badge=latest
434
434
  .. |PyPI version| image:: https://badge.fury.io/py/pytorch-optimizer.svg
435
435
  :target: https://badge.fury.io/py/pytorch-optimizer
436
- .. |PyPi download| image:: https://pepy.tech/badge/pytorch-optimizer
436
+ .. |PyPi download| image:: https://static.pepy.tech/badge/pytorch-optimizer
437
437
  :target: https://pepy.tech/project/pytorch-optimizer
438
- .. |PyPi month download| image:: https://pepy.tech/badge/pytorch-optimizer/month
438
+ .. |PyPi month download| image:: https://static.pepy.tech/badge/pytorch-optimizer/month
439
439
  :target: https://pepy.tech/project/pytorch-optimizer
440
440
  .. |PyPI pyversions| image:: https://img.shields.io/pypi/pyversions/pytorch-optimizer.svg
441
441
  :target: https://pypi.python.org/pypi/pytorch-optimizer/
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pytorch_optimizer"
3
- version = "2.11.1"
3
+ version = "2.11.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>"]
@@ -13,10 +13,10 @@ keywords = [
13
13
  "pytorch", "deep-learning", "optimizer", "lr scheduler", "A2Grad", "ASGD", "AccSGD", "AdaBelief", "AdaBound",
14
14
  "AdaDelta", "AdaFactor", "AdaMax", "AdaMod", "AdaNorm", "AdaPNM", "AdaSmooth", "AdaHessian", "Adai", "AdamP",
15
15
  "AdamS", "Adan", "AggMo", "AliG", "Amos", "Apollo", "AvaGrad", "CAME", "DAdaptAdaGrad", "DAdaptAdam", "DAdaptAdan",
16
- "DAdaptSGD", "DiffGrad", "Fromage", "Gravity", "GSAM", "LARS", "Lamb", "Lion", "LOMO", "Lookahead", "MADGRAD",
17
- "MSVAG", "Nero", "NovoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam", "Ranger",
18
- "Ranger21", "RotoGrad", "SAM", "SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SopihaH", "SRMM",
19
- "SWATS", "Tiger", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard",
16
+ "DAdaptSGD", "DAdaptLion", "DiffGrad", "Fromage", "Gravity", "GSAM", "LARS", "Lamb", "Lion", "LOMO", "Lookahead",
17
+ "MADGRAD", "MSVAG", "Nero", "NovoGrad", "PAdam", "PCGrad", "PID", "PNM", "Prodigy", "QHAdam", "QHM", "RAdam",
18
+ "Ranger", "Ranger21", "RotoGrad", "SAM", "SGDP", "Shampoo", "ScalableShampoo", "SGDW", "SignSGD", "SM3", "SopihaH",
19
+ "SRMM", "SWATS", "Tiger", "Yogi", "BCE", "BCEFocal", "Focal", "FocalCosine", "SoftF1", "Dice", "LDAM", "Jaccard",
20
20
  "Bi-Tempered", "Tversky", "FocalTversky", "LovaszHinge",
21
21
  ]
22
22
  classifiers = [
@@ -60,7 +60,7 @@ black = [
60
60
  { version = "==23.3.0", python = ">=3.7,<3.8" },
61
61
  { version = "^23.7.0", python = ">=3.8"}
62
62
  ]
63
- ruff = "^0.0.278"
63
+ ruff = "^0.0.286"
64
64
  pytest = "^7.4.0"
65
65
  pytest-cov = "^4.1.0"
66
66
 
@@ -122,7 +122,6 @@ testpaths = "tests"
122
122
  [tool.coverage.run]
123
123
  omit = [
124
124
  "./pytorch_optimizer/optimizer/gsam.py",
125
- "./pytorch_optimizer/optimizer/fp16.py",
126
125
  "./pytorch_optimizer/optimizer/rotograd.py",
127
126
  ]
128
127
 
@@ -48,7 +48,7 @@ from pytorch_optimizer.optimizer.amos import Amos
48
48
  from pytorch_optimizer.optimizer.apollo import Apollo
49
49
  from pytorch_optimizer.optimizer.avagrad import AvaGrad
50
50
  from pytorch_optimizer.optimizer.came import CAME
51
- from pytorch_optimizer.optimizer.dadapt import DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptSGD
51
+ from pytorch_optimizer.optimizer.dadapt import DAdaptAdaGrad, DAdaptAdam, DAdaptAdan, DAdaptLion, DAdaptSGD
52
52
  from pytorch_optimizer.optimizer.diffgrad import DiffGrad
53
53
  from pytorch_optimizer.optimizer.fp16 import DynamicLossScaler, SafeFP16Optimizer
54
54
  from pytorch_optimizer.optimizer.fromage import Fromage
@@ -171,6 +171,7 @@ OPTIMIZER_LIST: List[OPTIMIZER] = [
171
171
  LOMO,
172
172
  Tiger,
173
173
  CAME,
174
+ DAdaptLion,
174
175
  ]
175
176
  OPTIMIZERS: Dict[str, OPTIMIZER] = {str(optimizer.__name__).lower(): optimizer for optimizer in OPTIMIZER_LIST}
176
177
 
@@ -35,7 +35,7 @@ class AdaBelief(Optimizer, BaseOptimizer):
35
35
  weight_decay: float = 0.0,
36
36
  weight_decouple: bool = True,
37
37
  fixed_decay: bool = False,
38
- rectify: bool = True,
38
+ rectify: bool = False,
39
39
  n_sma_threshold: int = 5,
40
40
  degenerated_to_sgd: bool = True,
41
41
  ams_bound: bool = False,
@@ -699,3 +699,132 @@ class DAdaptAdan(Optimizer, BaseOptimizer):
699
699
  group['k'] += 1
700
700
 
701
701
  return loss
702
+
703
+
704
+ class DAdaptLion(Optimizer, BaseOptimizer):
705
+ r"""Lion with D-Adaptation. Leave LR set to 1 unless you encounter instability. This implementation is based on V3.
706
+
707
+ :param params: PARAMETERS. iterable of parameters to optimize or dicts defining parameter groups.
708
+ :param lr: float. learning rate.
709
+ :param betas: BETAS. coefficients used for computing running averages of gradient and the squared hessian trace.
710
+ :param d0: float. initial D estimate for D-adaptation (default 1e-6). Rarely needs changing.
711
+ :param weight_decay: float. weight decay (L2 penalty).
712
+ :param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
713
+ :param fixed_decay: bool. fix weight decay.
714
+ """
715
+
716
+ def __init__(
717
+ self,
718
+ params: PARAMETERS,
719
+ lr: float = 1.0,
720
+ betas: BETAS = (0.9, 0.999),
721
+ d0: float = 1e-6,
722
+ weight_decay: float = 0.0,
723
+ weight_decouple: bool = False,
724
+ fixed_decay: bool = False,
725
+ ):
726
+ self.validate_learning_rate(lr)
727
+ self.validate_betas(betas)
728
+ self.validate_non_negative(weight_decay, 'weight_decay')
729
+
730
+ defaults: DEFAULTS = {
731
+ 'lr': lr,
732
+ 'betas': betas,
733
+ 'd': d0,
734
+ 'weight_decay': weight_decay,
735
+ 'weight_decouple': weight_decouple,
736
+ 'fixed_decay': fixed_decay,
737
+ 'step': 0,
738
+ }
739
+ super().__init__(params, defaults)
740
+
741
+ def __str__(self) -> str:
742
+ return 'DAdaptLion'
743
+
744
+ @torch.no_grad()
745
+ def reset(self):
746
+ for group in self.param_groups:
747
+ group['step'] = 0
748
+ for p in group['params']:
749
+ if p.grad is None:
750
+ continue
751
+
752
+ state = self.state[p]
753
+
754
+ state['exp_avg'] = torch.zeros_like(p)
755
+ state['s'] = torch.zeros_like(p)
756
+
757
+ @torch.no_grad()
758
+ def step(self, closure: CLOSURE = None) -> LOSS:
759
+ loss: LOSS = None
760
+ if closure is not None:
761
+ with torch.enable_grad():
762
+ loss = closure()
763
+
764
+ group = self.param_groups[0]
765
+ device = group['params'][0].device
766
+
767
+ if 'numerator_weighted' not in group:
768
+ group['numerator_weighted'] = torch.tensor([0.0], device=device)
769
+ numerator_weighted = group['numerator_weighted']
770
+
771
+ sk_l1 = torch.tensor([0.0], device=device)
772
+ numerator_accumulator = torch.tensor([0.0], device=device)
773
+
774
+ beta1, beta2 = group['betas']
775
+ beta2_sq = math.sqrt(beta2)
776
+
777
+ d, lr = group['d'], group['lr']
778
+ d_lr: float = d * lr
779
+
780
+ for group in self.param_groups:
781
+ for p in group['params']:
782
+ if p.grad is None:
783
+ continue
784
+
785
+ grad = p.grad
786
+ if grad.is_sparse:
787
+ raise NoSparseGradientError(str(self))
788
+
789
+ state = self.state[p]
790
+ if len(state) == 0:
791
+ state['exp_avg'] = torch.zeros_like(p)
792
+ state['s'] = torch.zeros_like(p)
793
+
794
+ self.apply_weight_decay(
795
+ p=p,
796
+ grad=grad,
797
+ lr=d_lr,
798
+ weight_decay=group['weight_decay'],
799
+ weight_decouple=group['weight_decouple'],
800
+ fixed_decay=group['fixed_decay'],
801
+ )
802
+
803
+ exp_avg, s = state['exp_avg'], state['s']
804
+
805
+ update = exp_avg.clone().mul_(beta1).add_(grad, alpha=1.0 - beta1).sign_()
806
+ p.add_(update, alpha=-d_lr)
807
+
808
+ exp_avg.mul_(beta2).add_(grad, alpha=(1.0 - beta2) * d_lr)
809
+
810
+ numerator_accumulator.add_(torch.dot(update.flatten(), s.flatten()), alpha=d_lr)
811
+ s.mul_(beta2_sq).add_(update, alpha=(1.0 - beta2_sq) * d_lr)
812
+
813
+ sk_l1.add_(s.abs().sum())
814
+
815
+ numerator_weighted.mul_(beta2_sq).add_(numerator_accumulator, alpha=1.0 - beta2_sq)
816
+
817
+ if sk_l1 == 0:
818
+ return loss
819
+
820
+ if lr > 0.0:
821
+ d_hat: float = (numerator_weighted / ((1.0 - beta2_sq) * sk_l1)).item()
822
+ d = max(d, d_hat)
823
+
824
+ for group in self.param_groups:
825
+ group['step'] += 1
826
+
827
+ group['numerator_weighted'] = numerator_weighted
828
+ group['d'] = d
829
+
830
+ return loss
@@ -90,7 +90,7 @@ class DynamicLossScaler:
90
90
  self.loss_scale = max(self.loss_scale, self.threshold)
91
91
 
92
92
 
93
- class SafeFP16Optimizer(Optimizer):
93
+ class SafeFP16Optimizer(Optimizer): # pragma: no cover
94
94
  r"""Safe FP16 Optimizer.
95
95
 
96
96
  :param optimizer: OPTIMIZER.
@@ -46,7 +46,7 @@ class LOMO(BaseOptimizer, Optimizer):
46
46
  self.grad_norms: List[torch.Tensor] = []
47
47
  self.clip_coef: Optional[float] = None
48
48
 
49
- p0: torch.Tensor = list(self.model.parameters())[0]
49
+ p0: torch.Tensor = next(iter(self.model.parameters()))
50
50
 
51
51
  self.grad_func: Callable[[Any], Any] = (
52
52
  self.fuse_update_zero3() if hasattr(p0, 'ds_tensor') else self.fuse_update()
@@ -1,13 +1,14 @@
1
1
  from collections import defaultdict
2
- from typing import Dict
2
+ from typing import Callable, Dict
3
3
 
4
4
  import torch
5
+ from torch.optim import Optimizer
5
6
 
6
7
  from pytorch_optimizer.base.optimizer import BaseOptimizer
7
- from pytorch_optimizer.base.types import CLOSURE, LOSS, OPTIMIZER, STATE
8
+ from pytorch_optimizer.base.types import CLOSURE, DEFAULTS, LOSS, OPTIMIZER, STATE
8
9
 
9
10
 
10
- class Lookahead(BaseOptimizer):
11
+ class Lookahead(Optimizer, BaseOptimizer):
11
12
  r"""k steps forward, 1 step back.
12
13
 
13
14
  :param optimizer: OPTIMIZER. base optimizer.
@@ -27,12 +28,16 @@ class Lookahead(BaseOptimizer):
27
28
  self.validate_range(alpha, 'alpha', 0.0, 1.0)
28
29
  self.validate_options(pullback_momentum, 'pullback_momentum', ['none', 'reset', 'pullback'])
29
30
 
31
+ self._optimizer_step_pre_hooks: Dict[int, Callable] = {}
32
+ self._optimizer_step_post_hooks: Dict[int, Callable] = {}
33
+
30
34
  self.alpha = alpha
31
35
  self.k = k
32
36
  self.pullback_momentum = pullback_momentum
33
37
 
34
38
  self.optimizer = optimizer
35
39
  self.param_groups = self.optimizer.param_groups
40
+
36
41
  self.state: STATE = defaultdict(dict)
37
42
 
38
43
  for group in self.param_groups:
@@ -46,6 +51,13 @@ class Lookahead(BaseOptimizer):
46
51
  if self.pullback_momentum == 'pullback':
47
52
  state['slow_momentum'] = torch.zeros_like(p)
48
53
 
54
+ self.defaults: DEFAULTS = {
55
+ 'lookahead_alpha': alpha,
56
+ 'lookahead_k': k,
57
+ 'lookahead_pullback_momentum': pullback_momentum,
58
+ **optimizer.defaults,
59
+ }
60
+
49
61
  def __getstate__(self):
50
62
  return {
51
63
  'state': self.state,
@@ -219,7 +219,7 @@ class RotateOnly(nn.Module):
219
219
  self.backbone.to(*args, **kwargs)
220
220
  for head in self.heads:
221
221
  head.to(*args, **kwargs)
222
- return super(RotateOnly, self).to(*args, **kwargs)
222
+ return super().to(*args, **kwargs)
223
223
 
224
224
  def train(self, mode: bool = True) -> nn.Module:
225
225
  super().train(mode)
@@ -284,7 +284,7 @@ class RotateOnly(nn.Module):
284
284
  if not self.training:
285
285
  raise AssertionError('Backward should only be called when training')
286
286
 
287
- if self.iteration_counter == 0 or self.iteration_counter == self.burn_in_period:
287
+ if self.iteration_counter in (0, self.burn_in_period):
288
288
  for i, loss in enumerate(losses):
289
289
  self.initial_losses[i] = loss.item()
290
290