View source on GitHub
|
Optimizer that implements the AdamW algorithm.
Inherits From: Optimizer
tf.keras.optimizers.AdamW(
learning_rate=0.001,
weight_decay=0.004,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
clipnorm=None,
clipvalue=None,
global_clipnorm=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
jit_compile=True,
name='AdamW',
**kwargs
)
AdamW optimization is a stochastic gradient descent method that is based on adaptive estimation of first-order and second-order moments with an added method to decay weights per the techniques discussed in the paper, 'Decoupled Weight Decay Regularization' by Loshchilov, Hutter et al., 2019.
According to Kingma et al., 2014, the underying Adam method is "computationally efficient, has little memory requirement, invariant to diagonal rescaling of gradients, and is well suited for problems that are large in terms of data/parameters".
Args |
|---|
learning_rate
tf.Tensor, floating point value, a schedule that is a
tf.keras.optimizers.schedules.LearningRateSchedule, or a callable
that takes no arguments and returns the actual value to use. The
learning rate. Defaults to 0.001.
beta_1
beta_2
epsilon
amsgrad
False.
name
weight_decay
clipnorm
clipvalue
global_clipnorm
use_ema
ema_momentum
use_ema=True.
This is the momentum to use when computing
the EMA of the model's weights:
new_average = ema_momentum * old_average + (1 - ema_momentum) *
current_variable_value.
ema_overwrite_frequency
use_ema=True. Every ema_overwrite_frequency steps of iterations,
we overwrite the model variable by its moving average.
If None, the optimizer
does not overwrite model variables in the middle of training, and you
need to explicitly overwrite the variables at the end of training
by calling optimizer.finalize_variable_values()
(which updates the model
variables in-place). When using the built-in fit() training loop,
this happens automatically after the last epoch,
and you don't need to do anything.
jit_compile
mesh
tf.experimental.dtensor.Mesh instance. When provided,
the optimizer will be run in DTensor mode, e.g. state
tracking variable will be a DVariable, and aggregation/reduction will
happen in the global DTensor context.
**kwargs
Reference | |
|---|---|
- Loshchilov et al., 2019
- Kingma et al., 2014 for
adam - Reddi et al., 2018 for
amsgrad.
Notes:
The sparse implementation of this algorithm (used when the gradient is an
IndexedSlices object, typically because of tf.gather or an embedding
lookup in the forward pass) does apply momentum to variable slices even if
they were not used in the forward pass (meaning they have a gradient equal
to zero). Momentum decay (beta1) is also applied to the entire momentum
accumulator. This means that the sparse behavior is equivalent to the dense
behavior (in contrast to some momentum implementations which ignore momentum
unless a variable slice was actually used).
Attributes |
|---|
iterations
optimizer has run.By default, iterations would be incremented by one every time
apply_gradients() is called.
learning_rate
variables
Methods
add_variable
add_variable(
shape, dtype=None, initializer='zeros', name=None
)
Create an optimizer variable.
| Args |
|---|
shape
dtype
tf.keras.backend.floatx if unspecified.
initializer
name
| Returns | |
|---|---|
| An optimizer variable, in the format of tf.Variable. |
build
build(
var_list
)
Initialize optimizer variables.
AdamW optimizer has 3 types of variables: momentums, velocities and velocity_hat (only set when amsgrad is applied),
| Args |
|---|
var_list
compute_gradients
compute_gradients(
loss, var_list, tape=None
)
Compute gradients of loss on trainable variables.
| Args |
|---|
loss
Tensor or callable. If a callable, loss should take no
arguments and return the value to minimize.
var_list
Variable objects to update to minimize
loss, or a callable returning the list or tuple of Variable
objects. Use callable when the variable list would otherwise be
incomplete before minimize since the variables are created at the
first time loss is called.
tape
tf.GradientTape. If loss is provided as a
Tensor, the tape that computed the loss must be provided.
| Returns | |
|---|---|
A list of (gradient, variable) pairs. Variable is always present, but
gradient can be None.
|
exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Exclude variables from weight decay.
This method must be called before the optimizer's build method is
called. You can set specific variables to exclude out, or set a list of
strings as the anchor words, if any of which appear in a variable's
name, then the variable is excluded.
| Args |
|---|
var_list
tf.Variables to exclude from weight decay.
var_names
var_names appear
in the model variable's name, then this model variable is
excluded from weight decay. For example, var_names=['bias']
excludes all bias variables from weight decay.
finalize_variable_values
finalize_variable_values(
var_list
)
Set the final value of model's trainable variables.
Sometimes there are some extra steps before ending the variable updates, such as overriding the model variables with its average value.
| Args |
|---|
var_list
from_config
@classmethodfrom_config( config, custom_objects=None )
Creates an optimizer from its config.
This method is the reverse of get_config, capable of instantiating the
same optimizer from the config dictionary.
| Args |
|---|
config
custom_objects
| Returns | |
|---|---|
| An optimizer instance. |
get_config
get_config()
Returns the config of the optimizer.
An optimizer config is a Python dictionary (serializable) containing the configuration of an optimizer. The same optimizer can be reinstantiated later (without any saved state) from this configuration.
Subclass optimizer should override this method to include other hyperparameters.
| Returns | |
|---|---|
| Python dictionary. |
load_own_variables
load_own_variables(
store
)
Set the state of this optimizer object.
minimize
minimize(
loss, var_list, tape=None
)
Minimize loss by updating var_list.
This method simply computes gradient using tf.GradientTape and calls
apply_gradients(). If you want to process the gradient before applying
then call tf.GradientTape and apply_gradients() explicitly instead
of using this function.
| Args |
|---|
loss
Tensor or callable. If a callable, loss should take no
arguments and return the value to minimize.
var_list
Variable objects to update to minimize
loss, or a callable returning the list or tuple of Variable
objects. Use callable when the variable list would otherwise be
incomplete before minimize since the variables are created at the
first time loss is called.
tape
tf.GradientTape.
| Returns | |
|---|---|
| None |
save_own_variables
save_own_variables(
store
)
Get the state of this optimizer object.
set_weights
set_weights(
weights
)
Set the weights of the optimizer.
| Args |
|---|
weights
tf.Variables or numpy arrays, the target values
of optimizer variables. It should have the same order as
self._variables.
update_step
update_step(
gradient, variable
)
Update step given gradient and the associated model variable.
View source on GitHub