pytorch-optimizer 3.8.1__tar.gz → 3.8.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 (130) hide show
  1. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/PKG-INFO +3 -2
  2. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pyproject.toml +4 -2
  3. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/base/exception.py +8 -6
  4. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/base/optimizer.py +100 -90
  5. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/base/scheduler.py +12 -10
  6. pytorch_optimizer-3.8.2/pytorch_optimizer/base/type.py +27 -0
  7. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/bi_tempered.py +46 -37
  8. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/cross_entropy.py +5 -4
  9. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/dice.py +23 -20
  10. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/f1.py +4 -3
  11. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/focal.py +24 -20
  12. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/jaccard.py +21 -18
  13. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/ldam.py +6 -5
  14. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/lovasz.py +7 -5
  15. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/tversky.py +5 -4
  16. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/chebyshev.py +32 -19
  17. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/cosine_anealing.py +10 -9
  18. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/experimental/deberta_v3_lr_scheduler.py +14 -13
  19. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/linear_warmup.py +6 -5
  20. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/proportion.py +16 -8
  21. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/rex.py +6 -5
  22. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/wsd.py +23 -23
  23. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/__init__.py +2 -2
  24. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/a2grad.py +16 -15
  25. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adabelief.py +22 -21
  26. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adabound.py +19 -18
  27. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adadelta.py +17 -16
  28. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adafactor.py +30 -29
  29. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adagc.py +22 -21
  30. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adahessian.py +24 -23
  31. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adai.py +20 -19
  32. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adalite.py +20 -19
  33. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adam_mini.py +21 -21
  34. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamax.py +18 -17
  35. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamc.py +18 -17
  36. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamg.py +20 -19
  37. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamod.py +19 -18
  38. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamp.py +52 -49
  39. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adams.py +19 -18
  40. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adamw.py +19 -18
  41. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adan.py +18 -17
  42. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adanorm.py +20 -19
  43. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adapnm.py +19 -18
  44. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adashift.py +18 -17
  45. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adasmooth.py +18 -17
  46. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/ademamix.py +40 -38
  47. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/adopt.py +19 -18
  48. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/agc.py +7 -6
  49. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/aggmo.py +17 -16
  50. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/aida.py +24 -23
  51. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/alig.py +15 -14
  52. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/amos.py +19 -18
  53. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/apollo.py +37 -35
  54. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/avagrad.py +18 -17
  55. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/came.py +21 -20
  56. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/conda.py +19 -18
  57. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/dadapt.py +92 -87
  58. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/demo.py +32 -25
  59. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/diffgrad.py +22 -21
  60. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/emonavi.py +89 -84
  61. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/exadam.py +18 -17
  62. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/experimental/ranger25.py +33 -32
  63. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/fadam.py +20 -19
  64. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/fira.py +16 -15
  65. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/focus.py +16 -15
  66. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/fp16.py +45 -40
  67. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/fromage.py +14 -13
  68. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/ftrl.py +16 -16
  69. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/galore.py +16 -15
  70. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/galore_utils.py +8 -7
  71. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/gradient_centralization.py +5 -3
  72. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/grams.py +17 -16
  73. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/gravity.py +14 -13
  74. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/grokfast.py +45 -45
  75. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/kate.py +17 -16
  76. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/lamb.py +27 -26
  77. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/laprop.py +20 -19
  78. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/lars.py +17 -16
  79. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/lion.py +17 -16
  80. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/lomo.py +27 -25
  81. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/lookahead.py +14 -13
  82. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/madgrad.py +17 -16
  83. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/mars.py +28 -28
  84. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/msvag.py +12 -11
  85. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/muon.py +94 -105
  86. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/nero.py +16 -15
  87. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/novograd.py +19 -18
  88. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/orthograd.py +10 -9
  89. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/padam.py +17 -16
  90. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/pcgrad.py +17 -15
  91. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/pid.py +19 -18
  92. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/pnm.py +18 -17
  93. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/prodigy.py +28 -27
  94. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/psgd.py +31 -30
  95. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/psgd_utils.py +12 -11
  96. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/qhadam.py +19 -18
  97. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/qhm.py +17 -16
  98. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/racs.py +43 -41
  99. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/radam.py +20 -19
  100. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/ranger.py +22 -21
  101. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/ranger21.py +50 -49
  102. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/rotograd.py +47 -43
  103. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/sam.py +119 -106
  104. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/schedulefree.py +94 -93
  105. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/scion.py +55 -49
  106. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/sgd.py +101 -95
  107. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/shampoo.py +63 -74
  108. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/shampoo_utils.py +118 -93
  109. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/sm3.py +18 -16
  110. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/snsm.py +30 -30
  111. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/soap.py +26 -25
  112. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/sophia.py +22 -21
  113. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/spam.py +50 -45
  114. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/splus.py +27 -26
  115. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/srmm.py +12 -11
  116. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/swats.py +20 -19
  117. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/tam.py +24 -23
  118. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/tiger.py +14 -13
  119. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/trac.py +26 -24
  120. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/utils.py +57 -50
  121. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/yogi.py +17 -16
  122. pytorch_optimizer-3.8.1/pytorch_optimizer/base/type.py +0 -21
  123. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/LICENSE +0 -0
  124. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/README.md +0 -0
  125. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/__init__.py +0 -0
  126. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/base/__init__.py +0 -0
  127. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/loss/__init__.py +0 -0
  128. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/__init__.py +0 -0
  129. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/lr_scheduler/experimental/__init__.py +0 -0
  130. {pytorch_optimizer-3.8.1 → pytorch_optimizer-3.8.2}/pytorch_optimizer/optimizer/experimental/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytorch_optimizer
3
- Version: 3.8.1
3
+ Version: 3.8.2
4
4
  Summary: optimizer & lr scheduler & objective function collections in PyTorch
5
5
  License: Apache-2.0
6
6
  License-File: LICENSE
@@ -31,8 +31,9 @@ Classifier: Topic :: Software Development :: Libraries
31
31
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
32
32
  Requires-Dist: numpy (<=1.24.4) ; python_version < "3.9"
33
33
  Requires-Dist: numpy (>1.24.4) ; python_version >= "3.9"
34
- Requires-Dist: torch (>=1.10) ; python_version >= "3.9"
34
+ Requires-Dist: torch (>=1.10) ; python_version >= "3.10"
35
35
  Requires-Dist: torch (>=1.10,<2.5) ; python_version < "3.9"
36
+ Requires-Dist: torch (>=1.10,<2.9) ; python_version == "3.9"
36
37
  Project-URL: Documentation, https://pytorch-optimizers.readthedocs.io/en/latest
37
38
  Project-URL: Homepage, https://github.com/kozistr/pytorch_optimizer
38
39
  Project-URL: Repository, https://github.com/kozistr/pytorch_optimizer
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "pytorch_optimizer"
3
- version = "3.8.1"
3
+ version = "3.8.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>"]
@@ -37,6 +37,7 @@ classifiers = [
37
37
  "Programming Language :: Python :: 3.11",
38
38
  "Programming Language :: Python :: 3.12",
39
39
  "Programming Language :: Python :: 3.13",
40
+ "Programming Language :: Python :: 3.14",
40
41
  "Operating System :: OS Independent",
41
42
  "Topic :: Scientific/Engineering",
42
43
  "Topic :: Scientific/Engineering :: Artificial Intelligence",
@@ -53,7 +54,8 @@ numpy = [
53
54
  ]
54
55
  torch = [
55
56
  { version = ">=1.10,<2.5", python = "<3.9", source = "torch" },
56
- { version = ">=1.10", python = ">=3.9", source = "torch" },
57
+ { version = ">=1.10,<2.9", python = ">=3.9,<3.10", source = "torch" },
58
+ { version = ">=1.10", python = ">=3.10", source = "torch" },
57
59
  ]
58
60
 
59
61
  [tool.poetry.group.dev.dependencies]
@@ -1,8 +1,9 @@
1
1
  class NoSparseGradientError(Exception):
2
- """Raised when the gradient is sparse gradient.
2
+ r"""Raised when the gradient is sparse gradient.
3
3
 
4
- :param optimizer_name: str. optimizer name.
5
- :param note: str. special conditions to note (default '').
4
+ Args:
5
+ optimizer_name (str): The name of the optimizer where the error occurred.
6
+ note (str): Additional special conditions or notes (default is an empty string).
6
7
  """
7
8
 
8
9
  def __init__(self, optimizer_name: str, note: str = ''):
@@ -46,10 +47,11 @@ class NegativeStepError(Exception):
46
47
 
47
48
 
48
49
  class NoComplexParameterError(Exception):
49
- """Raised when the dtype of the parameter is complex.
50
+ r"""Raised when the dtype of the parameter is complex.
50
51
 
51
- :param optimizer_name: str. optimizer name.
52
- :param note: str. special conditions to note (default '').
52
+ Args:
53
+ optimizer_name (str): The name of the optimizer where the error occurred.
54
+ note (str): Additional special conditions or notes (default is an empty string).
53
55
  """
54
56
 
55
57
  def __init__(self, optimizer_name: str, note: str = ''):
@@ -4,31 +4,30 @@ from typing import List, Optional, Tuple, Union
4
4
 
5
5
  import torch
6
6
  from torch.optim import Optimizer
7
- from torch.optim.optimizer import ParamsT
8
7
 
9
8
  from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
10
9
  from pytorch_optimizer.base.type import (
11
- BETAS,
12
- CLOSURE,
13
- DEFAULTS,
14
- GROUP,
15
10
  HUTCHINSON_G,
16
- LOSS,
17
11
  OPTIMIZER_INSTANCE_OR_CLASS,
18
- PARAMETERS,
19
- STATE,
12
+ Betas,
13
+ Closure,
14
+ Defaults,
15
+ Loss,
16
+ Parameters,
17
+ ParamGroup,
18
+ State,
20
19
  )
21
20
 
22
21
 
23
22
  class BaseOptimizer(ABC, Optimizer):
24
- r"""Base optimizer class. Provides common functionalities for the optimizers."""
23
+ """Base optimizer class. Provides common functionalities for the optimizers."""
25
24
 
26
- def __init__(self, params: Union[PARAMETERS, ParamsT], defaults: DEFAULTS) -> None:
25
+ def __init__(self, params: Parameters, defaults: Defaults) -> None:
27
26
  super().__init__(params, defaults)
28
27
 
29
28
  @staticmethod
30
29
  def load_optimizer(optimizer: OPTIMIZER_INSTANCE_OR_CLASS, **kwargs) -> Optimizer:
31
- r"""Build torch.optim.Optimizer class."""
30
+ """Build torch.optim.Optimizer class."""
32
31
  if isinstance(optimizer, Optimizer):
33
32
  return optimizer
34
33
 
@@ -40,23 +39,23 @@ class BaseOptimizer(ABC, Optimizer):
40
39
 
41
40
  @staticmethod
42
41
  @torch.no_grad()
43
- def set_hessian(param_groups: PARAMETERS, state: STATE, hessian: List[torch.Tensor]) -> None:
44
- r"""Set hessian to state from external source. Generally useful when using functorch as a base.
42
+ def set_hessian(param_groups: Parameters, state: State, hessian: List[torch.Tensor]) -> None:
43
+ """Set hessian to state from external source. Generally useful when using functorch as a base.
44
+
45
+ Args:
46
+ param_groups: PARAMETERS. Parameter groups from optimizer.
47
+ state: STATE. Optimizer state dictionary.
48
+ hessian: List[torch.Tensor]. Sequence of Hessian tensors to set.
45
49
 
46
50
  Example:
47
- -------
48
- # Hutchinson's Estimator using HVP
49
- noise = tree_map(lambda v: torch.randn_like(v), params)
50
- loss_, hvp_est = jvp(grad(run_model_fn), (params,), (noise,))
51
- hessian_diag_est = tree_map(lambda a, b: a * b, hvp_est, noise)
51
+ # Hutchinson's Estimator using Hessian-vector product (HVP)
52
+ >>> noise = tree_map(lambda v: torch.randn_like(v), params)
53
+ >>> loss_, hvp_est = jvp(grad(run_model_fn), (params,), (noise,))
54
+ >>> hessian_diag_est = tree_map(lambda a, b: a * b, hvp_est, noise)
52
55
 
53
- optimizer.set_hessian(hessian_diag_est)
56
+ >>> optimizer.set_hessian(hessian_diag_est)
54
57
  # OR
55
- optimizer.step(hessian=hessian_diag_est)
56
-
57
- :param param_groups: PARAMETERS. parameter groups.
58
- :param state: STATE. optimizer state.
59
- :param hessian: List[torch.Tensor]. sequence of hessian to set.
58
+ >>> optimizer.step(hessian=hessian_diag_est)
60
59
  """
61
60
  i: int = 0
62
61
  for group in param_groups:
@@ -70,12 +69,13 @@ class BaseOptimizer(ABC, Optimizer):
70
69
  i += 1
71
70
 
72
71
  @staticmethod
73
- def zero_hessian(param_groups: PARAMETERS, state: STATE, pre_zero: bool = True) -> None:
74
- r"""Zero-out hessian.
72
+ def zero_hessian(param_groups: Parameters, state: State, pre_zero: bool = True) -> None:
73
+ """Zero-out Hessian.
75
74
 
76
- :param param_groups: PARAMETERS. parameter groups.
77
- :param state: STATE. optimizer state.
78
- :param pre_zero: bool. zero-out hessian before computing the hessian.
75
+ Args:
76
+ param_groups (Parameters): Parameter groups from the optimizer.
77
+ state (State): Optimizer state dictionary.
78
+ pre_zero (bool): If True, zero-out the Hessian before computing/updating it.
79
79
  """
80
80
  for group in param_groups:
81
81
  for p in group['params']:
@@ -88,19 +88,20 @@ class BaseOptimizer(ABC, Optimizer):
88
88
  @staticmethod
89
89
  @torch.no_grad()
90
90
  def compute_hutchinson_hessian(
91
- param_groups: PARAMETERS,
92
- state: STATE,
91
+ param_groups: Parameters,
92
+ state: State,
93
93
  num_samples: int = 1,
94
94
  alpha: float = 1.0,
95
95
  distribution: HUTCHINSON_G = 'gaussian',
96
96
  ) -> None:
97
- r"""Hutchinson's approximate hessian, added to the state under key `hessian`.
98
-
99
- :param param_groups: PARAMETERS. parameter groups.
100
- :param state: STATE. optimizer state.
101
- :param num_samples: int. number of times to sample `z` for the approximation of the hessian trace.
102
- :param alpha: float. alpha.
103
- :param distribution: HUTCHINSON_G. type of distribution.
97
+ r"""Hutchinson's approximate Hessian, added to the state under key `hessian`.
98
+
99
+ Args:
100
+ param_groups (Parameters): Parameter groups from the optimizer.
101
+ state (State): Optimizer state dictionary.
102
+ num_samples (int): Number of times to sample noise vector `z` for the trace approximation.
103
+ alpha (float): Scaling factor for the Hessian estimate.
104
+ distribution (HUTCHINSON_G): Type of noise distribution used (e.g., Rademacher).
104
105
  """
105
106
  if distribution not in ('gaussian', 'rademacher'):
106
107
  raise NotImplementedError(f'hessian with distribution {distribution} is not implemented.')
@@ -136,15 +137,16 @@ class BaseOptimizer(ABC, Optimizer):
136
137
  fixed_decay: bool,
137
138
  ratio: Optional[float] = None,
138
139
  ) -> None:
139
- r"""Apply weight decay.
140
-
141
- :param p: torch.Tensor. parameter.
142
- :param grad: torch.Tensor. gradient.
143
- :param lr: float. learning rate.
144
- :param weight_decay: float. weight decay (L2 penalty).
145
- :param weight_decouple: bool. the optimizer uses decoupled weight decay as in AdamW.
146
- :param fixed_decay: bool. fix weight decay.
147
- :param ratio: Optional[float]. scale weight decay.
140
+ """Apply weight decay.
141
+
142
+ Args:
143
+ p (torch.Tensor): Parameter tensor to apply weight decay to.
144
+ grad (torch.Tensor): Gradient tensor of parameter p.
145
+ lr (float): Learning rate to scale the update.
146
+ weight_decay (float): Weight decay coefficient (L2 penalty).
147
+ weight_decouple (bool): If True, applies decoupled weight decay as in AdamW.
148
+ fixed_decay (bool): If True, fixes weight decay to not depend on learning rate.
149
+ ratio (Optional[float]): Optional scaling factor for weight decay.
148
150
  """
149
151
  if weight_decouple:
150
152
  p.mul_(1.0 - weight_decay * (1.0 if fixed_decay else lr) * (ratio if ratio is not None else 1.0))
@@ -159,13 +161,14 @@ class BaseOptimizer(ABC, Optimizer):
159
161
  eps: float,
160
162
  exp_avg_sq_eps: float = 1e-15,
161
163
  ) -> torch.Tensor:
162
- r"""Apply AMSBound variant.
163
-
164
- :param ams_bound: bool. whether to apply AMSBound.
165
- :param exp_avg_sq: torch.Tensor. exp_avg_sq.
166
- :param max_exp_avg_sq: Optional[torch.Tensor]. max_exp_avg_sq.
167
- :param eps: float. epsilon.
168
- :param exp_avg_sq_eps: float. eps value for numerical stability for exp_avg_sq.
164
+ """Apply AMSBound variant.
165
+
166
+ Args:
167
+ ams_bound (bool): Whether to apply the AMSBound variant.
168
+ exp_avg_sq (torch.Tensor): Exponential moving average of squared gradients.
169
+ max_exp_avg_sq (Optional[torch.Tensor]): Maximum of all exp_avg_sq elements, for AMSBound.
170
+ eps (float): Small epsilon value for numerical stability.
171
+ exp_avg_sq_eps (float): Epsilon used specifically for numerical stability in exp_avg_sq computations.
169
172
  """
170
173
  if ams_bound:
171
174
  if torch.is_complex(max_exp_avg_sq):
@@ -180,10 +183,11 @@ class BaseOptimizer(ABC, Optimizer):
180
183
 
181
184
  @staticmethod
182
185
  def debias(beta: float, step: int) -> float:
183
- r"""Adam-style debias correction. Returns `1.0 - beta ** step`.
186
+ """Adam-style debias correction.
184
187
 
185
- :param beta: float. beta.
186
- :param step: int. number of step.
188
+ Args:
189
+ beta (float): Exponential decay rate for moment estimates.
190
+ step (int): Current optimization step number.
187
191
  """
188
192
  return 1.0 - math.pow(beta, step) # fmt: skip
189
193
 
@@ -193,19 +197,21 @@ class BaseOptimizer(ABC, Optimizer):
193
197
 
194
198
  Simplified version of `\^{beta} = beta * (1.0 - beta ** (step - 1)) / (1.0 - beta ** step)`
195
199
 
196
- :param beta: float. beta.
197
- :param step: int. number of step.
200
+ Args:
201
+ beta (float): The original beta decay rate.
202
+ step (int): Current optimization step number.
198
203
  """
199
204
  beta_n: float = math.pow(beta, step)
200
205
  return (beta_n - beta) / (beta_n - 1.0) # fmt: skip
201
206
 
202
207
  @staticmethod
203
208
  def apply_adam_debias(adam_debias: bool, step_size: float, bias_correction1: float) -> float:
204
- r"""Apply AdamD variant.
209
+ """Apply AdamD variant.
205
210
 
206
- :param adam_debias: bool. Only correct the denominator to avoid inflating step sizes early in training.
207
- :param step_size: float. step size.
208
- :param bias_correction1: float. bias_correction.
211
+ Args:
212
+ adam_debias (bool): If True, only corrects the denominator to avoid inflating step sizes early in training.
213
+ step_size (float): The step size for the update.
214
+ bias_correction1 (float): The bias correction factor for the first moment.
209
215
  """
210
216
  return step_size if adam_debias else step_size / bias_correction1
211
217
 
@@ -218,14 +224,15 @@ class BaseOptimizer(ABC, Optimizer):
218
224
  n_sma_threshold: int,
219
225
  degenerated_to_sgd: bool,
220
226
  ) -> Tuple[float, float]:
221
- r"""Get step size for rectify optimizer.
222
-
223
- :param is_rectify: bool. whether to apply rectify-variant.
224
- :param step: int. number of steps.
225
- :param lr: float. learning rate.
226
- :param beta2: float. beta2.
227
- :param n_sma_threshold: float. SMA threshold.
228
- :param degenerated_to_sgd: bool. degenerated to SGD.
227
+ """Get step size for rectify optimizer.
228
+
229
+ Args:
230
+ is_rectify (bool): Whether to apply the rectify variant.
231
+ step (int): Current step number.
232
+ lr (float): Base learning rate.
233
+ beta2 (float): Beta2 parameter from optimizer (momentum term).
234
+ n_sma_threshold (float): Simple Moving Average (SMA) threshold for rectification.
235
+ degenerated_to_sgd (bool): Whether to degenerate to SGD if below threshold.
229
236
  """
230
237
  step_size: float = lr
231
238
  n_sma: float = 0.0
@@ -254,10 +261,11 @@ class BaseOptimizer(ABC, Optimizer):
254
261
  ) -> torch.Tensor:
255
262
  r"""Get AdaNorm gradient.
256
263
 
257
- :param grad: torch.Tensor. gradient.
258
- :param adanorm: bool. whether to use the AdaNorm variant.
259
- :param exp_grad_norm: Optional[torch.Tensor]. exp_grad_norm.
260
- :param r: Optional[float]. EMA factor. between 0.9 ~ 0.99 is preferred.
264
+ Args:
265
+ grad (torch.Tensor): Gradient.
266
+ adanorm (bool): Whether to use the AdaNorm variant.
267
+ exp_grad_norm (Optional[torch.Tensor]): Exponential moving average of gradient norm.
268
+ r (Optional[float]): EMA factor; between 0.9 and 0.99 is preferred.
261
269
  """
262
270
  if not adanorm or exp_grad_norm is None:
263
271
  return grad
@@ -273,7 +281,7 @@ class BaseOptimizer(ABC, Optimizer):
273
281
 
274
282
  @staticmethod
275
283
  def get_rms(x: torch.Tensor) -> torch.Tensor:
276
- r"""Get RMS."""
284
+ """Get RMS."""
277
285
  return x.norm(2) / math.sqrt(x.numel())
278
286
 
279
287
  @staticmethod
@@ -282,17 +290,18 @@ class BaseOptimizer(ABC, Optimizer):
282
290
  exp_avg_sq_col: torch.Tensor,
283
291
  output: torch.Tensor,
284
292
  ) -> None:
285
- r"""Get approximation of EMA of squared gradient."""
293
+ """Get approximation of EMA of squared gradient."""
286
294
  r_factor: torch.Tensor = (exp_avg_sq_row / exp_avg_sq_row.mean(dim=-1, keepdim=True)).rsqrt_().unsqueeze(-1)
287
295
  c_factor: torch.Tensor = exp_avg_sq_col.unsqueeze(-2).rsqrt()
288
296
  torch.mul(r_factor, c_factor, out=output)
289
297
 
290
298
  @staticmethod
291
299
  def apply_cautious(update: torch.Tensor, grad: torch.Tensor) -> None:
292
- r"""Apply the Cautious Optimizer feature.
300
+ """Apply the Cautious Optimizer feature.
293
301
 
294
- :param update: torch.Tensor. update. it'll be masked in in-place manner.
295
- :param grad: torch.Tensor. gradient.
302
+ Args:
303
+ update (torch.Tensor): update. it'll be masked in in-place manner.
304
+ grad (torch.Tensor): gradient.
296
305
  """
297
306
  mask = (update * grad > 0).to(grad.dtype)
298
307
  mask.mul_(mask.numel() / (mask.sum() + 1))
@@ -300,11 +309,12 @@ class BaseOptimizer(ABC, Optimizer):
300
309
 
301
310
  @staticmethod
302
311
  def get_stable_adamw_rms(grad: torch.Tensor, exp_avg_sq: torch.Tensor, eps: float = 1e-16) -> float:
303
- r"""Get StableAdamW RMS.
312
+ """Get StableAdamW RMS.
304
313
 
305
- :param grad: torch.Tensor. gradient.
306
- :param exp_avg_sq: torch.Tensor. exp_avg_sq.
307
- :param eps: float. epsilon.
314
+ Args:
315
+ grad (torch.Tensor): gradient.
316
+ exp_avg_sq (torch.Tensor): Exponential moving average of squared gradient.
317
+ eps (float): Small value to prevent division by zero.
308
318
  """
309
319
  return grad.pow(2).div_(exp_avg_sq.clip(min=eps)).mean().sqrt_().clip_(min=1.0).item()
310
320
 
@@ -362,7 +372,7 @@ class BaseOptimizer(ABC, Optimizer):
362
372
  if x % y != 0:
363
373
  raise ValueError(f'{x} must be divisible by {y}')
364
374
 
365
- def validate_betas(self, betas: BETAS, beta_range_type: str = '[)', beta3_range_type: str = '[]') -> None:
375
+ def validate_betas(self, betas: Betas, beta_range_type: str = '[)', beta3_range_type: str = '[]') -> None:
366
376
  if betas[0] is not None:
367
377
  self.validate_range(betas[0], 'beta1', 0.0, 1.0, range_type=beta_range_type)
368
378
 
@@ -382,13 +392,13 @@ class BaseOptimizer(ABC, Optimizer):
382
392
  self.validate_range(nus[1], 'nu2', 0.0, 1.0, range_type='[]')
383
393
 
384
394
  @abstractmethod
385
- def init_group(self, group: GROUP, **kwargs) -> None: # pragma: no cover
386
- r"""Initialize the group of the optimizer and return is_complex."""
395
+ def init_group(self, group: ParamGroup, **kwargs) -> None: # pragma: no cover
396
+ """Initialize the group of the optimizer and return is_complex."""
387
397
  return
388
398
 
389
399
  @staticmethod
390
400
  def view_as_real(param, *state_and_grads) -> tuple:
391
- r"""View imaginary tensors as real tensors."""
401
+ """View imaginary tensors as real tensors."""
392
402
  if torch.is_complex(param):
393
403
  param = torch.view_as_real(param)
394
404
  state_and_grads = tuple(
@@ -400,9 +410,9 @@ class BaseOptimizer(ABC, Optimizer):
400
410
 
401
411
  @staticmethod
402
412
  def maximize_gradient(grad: torch.Tensor, maximize: bool = False) -> None:
403
- r"""Maximize the objective with respect to the params, instead of minimizing."""
413
+ """Maximize the objective with respect to the params, instead of minimizing."""
404
414
  if maximize:
405
415
  grad.neg_()
406
416
 
407
- def step(self, closure: CLOSURE = None) -> LOSS: # pragma: no cover
417
+ def step(self, closure: Closure = None) -> Loss: # pragma: no cover
408
418
  raise NotImplementedError
@@ -7,16 +7,18 @@ from pytorch_optimizer.base.exception import NegativeLRError, NegativeStepError
7
7
 
8
8
 
9
9
  class BaseLinearWarmupScheduler(ABC):
10
- r"""BaseLinearWarmupScheduler class.
11
-
12
- The LR Scheduler class based on this class has linear warmup strategy.
13
-
14
- :param optimizer: Optimizer. It will set learning rate to all trainable parameters in optimizer.
15
- :param t_max: int. total steps to train.
16
- :param max_lr: float. maximum lr.
17
- :param min_lr: float. minimum lr.
18
- :param init_lr: float. initial lr.
19
- :param warmup_steps: int. steps to warm-up.
10
+ """BaseLinearWarmupScheduler class.
11
+
12
+ A learning rate scheduler class that implements a linear warmup strategy.
13
+
14
+ Args:
15
+ optimizer (Optimizer): The optimizer whose learning rate will be scheduled.
16
+ It will set the learning rate to all trainable parameters in the optimizer.
17
+ t_max (int): Total number of training steps (epochs or iterations).
18
+ max_lr (float): The maximum learning rate after warmup.
19
+ min_lr (float): The minimum learning rate to decay to (or start from if warmup).
20
+ init_lr (float): Initial learning rate at the start of warmup.
21
+ warmup_steps (int): Number of steps to warm up linearly from init_lr to max_lr.
20
22
  """
21
23
 
22
24
  def __init__(
@@ -0,0 +1,27 @@
1
+ from typing import Any, Callable, Dict, Iterable, Literal, Optional, Tuple, Type, Union
2
+
3
+ import torch
4
+ from torch.optim import Optimizer
5
+ from torch.optim.lr_scheduler import LRScheduler
6
+
7
+ OPTIMIZER = Type[Optimizer]
8
+ OPTIMIZER_INSTANCE_OR_CLASS = Union[OPTIMIZER, Optimizer]
9
+ SCHEDULER = Type[LRScheduler]
10
+
11
+ Defaults = Dict[str, Any]
12
+ ParamGroup = Dict[str, Any]
13
+ State = Dict
14
+ Parameters = Optional[Union[Iterable[torch.Tensor], Iterable[ParamGroup]]]
15
+
16
+ Closure = Optional[Callable[[], float]]
17
+ Loss = Optional[float]
18
+ Betas = Union[
19
+ Tuple[float, float],
20
+ Tuple[float, float, float],
21
+ Tuple[None, float],
22
+ ]
23
+
24
+ HUTCHINSON_G = Literal['gaussian', 'rademacher']
25
+ CLASS_MODE = Literal['binary', 'multiclass', 'multilabel']
26
+
27
+ DATA_FORMAT = Literal['channels_first', 'channels_last']
@@ -5,21 +5,22 @@ from torch import nn
5
5
 
6
6
 
7
7
  def log_t(u: torch.Tensor, t: float) -> torch.Tensor:
8
- r"""Compute log_t for `u'."""
8
+ """Compute log_t for `u'."""
9
9
  return u.log() if t == 1.0 else (u.pow(1.0 - t) - 1.0) / (1.0 - t)
10
10
 
11
11
 
12
12
  def exp_t(u: torch.Tensor, t: float) -> torch.Tensor:
13
- r"""Compute exp_t for `u'."""
13
+ """Compute exp_t for `u'."""
14
14
  return u.exp() if t == 1 else (1.0 + (1.0 - t) * u).relu().pow(1.0 / (1.0 - t))
15
15
 
16
16
 
17
17
  def compute_normalization_fixed_point(activations: torch.Tensor, t: float, num_iters: int) -> torch.Tensor:
18
18
  r"""Return the normalization value for each example (t > 1.0).
19
19
 
20
- :param activations: torch.Tensor. A multidimensional tensor with last dimension `num_classes`.
21
- :param t: float. Temperature (> 1.0 for tail heaviness).
22
- :param num_iters: int. Number of iterations to run the method.
20
+ Args:
21
+ activations (torch.Tensor): A multi-dimensional tensor with the last dimension representing classes.
22
+ t (float): Temperature value (> 1.0 for tail heaviness).
23
+ num_iters (int): Number of iterations to run the method.
23
24
  """
24
25
  mu, _ = torch.max(activations, dim=-1, keepdim=True)
25
26
 
@@ -39,9 +40,10 @@ def compute_normalization_fixed_point(activations: torch.Tensor, t: float, num_i
39
40
  def compute_normalization_binary_search(activations: torch.Tensor, t: float, num_iters: int) -> torch.Tensor:
40
41
  """Compute normalization value for each example (t < 1.0).
41
42
 
42
- :param activations: torch.Tensor. A multidimensional tensor with last dimension `num_classes`.
43
- :param t: float. Temperature (> 1.0 for tail heaviness).
44
- :param num_iters: int. Number of iterations to run the method.
43
+ Args:
44
+ activations (torch.Tensor): A multidimensional tensor with the last dimension `num_classes`.
45
+ t (float): Temperature parameter (< 1.0 for peak sharpening).
46
+ num_iters (int): Number of iterations to run the normalization.
45
47
  """
46
48
  mu, _ = torch.max(activations, dim=-1, keepdim=True)
47
49
  normalized_activations = activations - mu
@@ -68,7 +70,7 @@ def compute_normalization_binary_search(activations: torch.Tensor, t: float, num
68
70
 
69
71
 
70
72
  class ComputeNormalization(torch.autograd.Function):
71
- r"""Custom backward pass for compute_normalization. See compute_normalization."""
73
+ """Custom backward pass for compute_normalization. See compute_normalization."""
72
74
 
73
75
  @staticmethod
74
76
  def forward(ctx, activations: torch.Tensor, t: float, num_iters: int) -> torch.Tensor:
@@ -100,19 +102,21 @@ class ComputeNormalization(torch.autograd.Function):
100
102
  def compute_normalization(activations: torch.Tensor, t: float, num_iters: int = 5) -> torch.Tensor:
101
103
  r"""Compute normalization value for each example.
102
104
 
103
- :param activations: torch.Tensor. A multidimensional tensor with last dimension `num_classes`.
104
- :param t: float. Temperature (> 1.0 for tail heaviness).
105
- :param num_iters: int. Number of iterations to run the method.
105
+ Args:
106
+ activations (torch.Tensor): A multi-dimensional tensor with the last dimension `num_classes`.
107
+ t (float): Temperature parameter (> 1.0 for tail heaviness).
108
+ num_iters (int): Number of iterations to run the method.
106
109
  """
107
110
  return ComputeNormalization.apply(activations, t, num_iters)
108
111
 
109
112
 
110
113
  def tempered_softmax(activations: torch.Tensor, t: float, num_iters: int = 5) -> torch.Tensor:
111
- r"""Tempered softmax function.
114
+ """Tempered softmax function.
112
115
 
113
- :param activations: torch.Tensor. A multidimensional tensor with last dimension `num_classes`.
114
- :param t: float. Temperature (> 1.0 for tail heaviness).
115
- :param num_iters: int. Number of iterations to run the method.
116
+ Args:
117
+ activations (torch.Tensor): A multidimensional tensor with last dimension `num_classes`.
118
+ t (float): Temperature parameter (> 1.0 for tail heaviness).
119
+ num_iters (int): Number of iterations to run the method.
116
120
  """
117
121
  if t == 1.0:
118
122
  return activations.softmax(dim=-1)
@@ -133,14 +137,15 @@ def bi_tempered_logistic_loss(
133
137
  ) -> torch.Tensor:
134
138
  r"""Bi-Tempered Logistic Loss.
135
139
 
136
- :param activations: torch.Tensor. A multidimensional tensor with last dimension `num_classes`.
137
- :param labels: torch.Tensor. A tensor with shape and dtype as activations (onehot), or a long tensor of
138
- one dimension less than activations (pytorch standard)
139
- :param t1: float. Temperature 1 (< 1.0 for boundedness).
140
- :param t2: float. Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
141
- :param label_smooth: float. Label smoothing parameter between [0, 1).
142
- :param num_iters: int. Number of iterations to run the method.
143
- :param reduction: str. type of reduction.
140
+ Args:
141
+ activations (torch.Tensor): A multidimensional tensor with last dimension `num_classes`.
142
+ labels (torch.Tensor): Tensor with the same shape and dtype as activations (one-hot encoded),
143
+ or a long tensor with one dimension less (class indices).
144
+ t1 (float): Temperature 1 (< 1.0 for boundedness of loss).
145
+ t2 (float): Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
146
+ label_smooth (float): Label smoothing parameter, between 0 and 1.
147
+ num_iters (int): Number of iterations to run the normalization method.
148
+ reduction (str): Specifies reduction method to apply to output: 'none', 'mean', or 'sum'.
144
149
  """
145
150
  if len(labels.shape) < len(activations.shape):
146
151
  labels_onehot = torch.zeros_like(activations)
@@ -174,13 +179,15 @@ def bi_tempered_logistic_loss(
174
179
  class BiTemperedLogisticLoss(nn.Module):
175
180
  """Bi-Tempered Log Loss.
176
181
 
177
- Reference : https://github.com/BloodAxe/pytorch-toolbelt/blob/develop/pytorch_toolbelt/losses/bitempered_loss.py
182
+ Reference:
183
+ https://github.com/BloodAxe/pytorch-toolbelt/blob/develop/pytorch_toolbelt/losses/bitempered_loss.py
178
184
 
179
- :param t1: float. Temperature 1 (< 1.0 for boundedness).
180
- :param t2: float. Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
181
- :param label_smooth: float. Label smoothing parameter between [0, 1).
182
- :param ignore_index: Optional[int]. Index to ignore.
183
- :param reduction: str. type of reduction.
185
+ Args:
186
+ t1 (float): Temperature 1 (< 1.0 for boundedness).
187
+ t2 (float): Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
188
+ label_smooth (float): Label smoothing parameter between 0 and 1.
189
+ ignore_index (Optional[int]): Index to ignore during loss calculation.
190
+ reduction (str): Type of reduction to apply to output, e.g. 'mean', 'sum', or 'none'.
184
191
  """
185
192
 
186
193
  def __init__(
@@ -215,13 +222,15 @@ class BiTemperedLogisticLoss(nn.Module):
215
222
 
216
223
 
217
224
  class BinaryBiTemperedLogisticLoss(nn.Module):
218
- """Modification of BiTemperedLogisticLoss for binary classification case.
219
-
220
- :param t1: float. Temperature 1 (< 1.0 for boundedness).
221
- :param t2: float. Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
222
- :param label_smooth: float. Label smoothing parameter between [0, 1).
223
- :param ignore_index: Optional[int]. Index to ignore.
224
- :param reduction: str. type of reduction.
225
+ """Bi-Tempered Logistic Loss for Binary Classification.
226
+
227
+ Args:
228
+ t1 (float): Temperature 1 (< 1.0 for boundedness of the loss).
229
+ t2 (float): Temperature 2 (> 1.0 for tail heaviness, < 1.0 for finite support).
230
+ label_smooth (float): Label smoothing parameter between 0 and 1.
231
+ ignore_index (Optional[int]): Specifies a target value that is ignored and does not contribute
232
+ to the input gradient.
233
+ reduction (str): Specifies the reduction to apply to the output: 'none', 'mean', or 'sum'.
225
234
  """
226
235
 
227
236
  def __init__(