Skip to content

Commit 9deb3bb

Browse files
committed
support kwarg maximize
1 parent 4ce8ac4 commit 9deb3bb

1 file changed

Lines changed: 26 additions & 5 deletions

File tree

python/paddle/optimizer/optimizer.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,9 @@ class Optimizer:
161161
For more information, please refer to :ref:`api_guide_Name`.
162162
The default value is None.
163163
164+
Keyword Args:
165+
maximize (bool, optional): Maximize the objective with respect to the params, instead of minimizing. The default value is False.
166+
164167
Returns:
165168
Base class for optimizer.
166169
@@ -218,6 +221,8 @@ def __init__(
218221
weight_decay: float | WeightDecayRegularizer | None = None,
219222
grad_clip: GradientClipBase | None = None,
220223
name: str | None = None,
224+
*,
225+
maximize: bool = False,
221226
) -> None:
222227
if parameters is not None:
223228
# paddle.Tensor is also iterable, so here we don't check whether
@@ -274,6 +279,7 @@ def __init__(
274279
self.regularization = weight_decay
275280
self._grad_clip = grad_clip
276281
self._learning_rate = learning_rate
282+
self._maximize = maximize
277283

278284
self._dtype = None
279285
# Infer the dtype form parameter
@@ -2037,7 +2043,10 @@ def _declarative_step(self):
20372043
parameters,
20382044
)
20392045
)
2040-
params_grads = [(param, param.grad) for param in parameters]
2046+
if self._maximize is True:
2047+
params_grads = [(param, -param.grad) for param in parameters]
2048+
else:
2049+
params_grads = [(param, param.grad) for param in parameters]
20412050
optimize_ops = self.apply_gradients(params_grads)
20422051

20432052
@imperative_base.no_grad()
@@ -2110,15 +2119,24 @@ def step(
21102119
hasattr(param, "main_grad")
21112120
and param.main_grad is not None
21122121
):
2113-
params_grads.append((param, param.main_grad))
2122+
if self._maximize is True:
2123+
params_grads.append((param, -param.main_grad))
2124+
else:
2125+
params_grads.append((param, param.main_grad))
21142126
elif (
21152127
hasattr(param, "main_grad") and param.main_grad is not None
21162128
):
2117-
params_grads.append((param, param.main_grad))
2129+
if self._maximize is True:
2130+
params_grads.append((param, -param.main_grad))
2131+
else:
2132+
params_grads.append((param, param.main_grad))
21182133
else:
21192134
if param._grad_ivar() is not None:
21202135
grad_var = param._grad_ivar()
2121-
params_grads.append((param, grad_var))
2136+
if self._maximize is True:
2137+
params_grads.append((param, -grad_var))
2138+
else:
2139+
params_grads.append((param, grad_var))
21222140

21232141
self._apply_optimize(
21242142
loss=None,
@@ -2136,7 +2154,10 @@ def step(
21362154
continue
21372155
if param._grad_ivar() is not None:
21382156
grad_var = param._grad_ivar()
2139-
params_grads['params'].append((param, grad_var))
2157+
if self._maximize is True:
2158+
params_grads['params'].append((param, -grad_var))
2159+
else:
2160+
params_grads['params'].append((param, grad_var))
21402161
params_grads.update(
21412162
{k: v for k, v in param_group.items() if k != 'params'}
21422163
)

0 commit comments

Comments
 (0)