@@ -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