Vectorized differentially private subclass of given class `tf.keras.optimizers.Adagrad`.

You can use this as a differentially private replacement for `tf.keras.optimizers.Adagrad`. This optimizer implements DP-SGD using the standard Gaussian mechanism. It differs from `DPKerasAdagrad` in that it attempts to vectorize the gradient computation and clipping of microbatches.

When instantiating this optimizer, you need to supply several DP-related arguments followed by the standard arguments for `Adagrad`.

Examples:

``````# Create optimizer.
<standard arguments>)
``````

When using the optimizer, be sure to pass in the loss as a rank-one tensor with one entry for each example.

The optimizer can be used directly via its `minimize` method, or through a Keras `Model`.

``````# Compute loss as a tensor by using tf.losses.Reduction.NONE.
# Compute vector of per-example loss rather than its mean over a minibatch.
# (Side note: Always verify that the output shape when using
# tf.losses.Reduction.NONE-- it can sometimes be surprising.
loss = tf.keras.losses.CategoricalCrossentropy(
from_logits=True, reduction=tf.losses.Reduction.NONE)

# Use optimizer in a Keras model.
opt.minimize(loss, var_list=[var])
``````
``````# Compute loss as a tensor by using tf.losses.Reduction.NONE.
# Compute vector of per-example loss rather than its mean over a minibatch.
loss = tf.keras.losses.CategoricalCrossentropy(
from_logits=True, reduction=tf.losses.Reduction.NONE)

# Use optimizer in a Keras model.
model = tf.keras.Sequential(...)
model.compile(optimizer=opt, loss=loss, metrics=['accuracy'])
model.fit(...)
``````

`l2_norm_clip` Clipping norm (max L2 norm of per microbatch gradients).
`noise_multiplier` Ratio of the standard deviation to the clipping norm.
`num_microbatches` Number of microbatches into which each minibatch is split.
`unconnected_gradients_to_zero` The Jacobian is used to compute the microbatch losses. If a node in the graph is deliberately not connected, then the Jacobian computation will return a `None` for that node. Set this flag to True to treat these Jacobians as zero.
`*args` These will be passed on to the base class `__init__` method.
`**kwargs` These will be passed on to the base class `__init__` method.

`clipnorm` `float` or `None`. If set, clips gradients to a maximum norm.
`clipvalue` `float` or `None`. If set, clips gradients to a maximum value.
`global_clipnorm` `float` or `None`.

If set, clips gradients to a maximum norm.

Check `tf.clip_by_global_norm` for more details.

`iterations` Variable. The number of training steps this Optimizer has run.
`weights` Returns variables of this Optimizer based on the order created.

Methods

`add_slot`

Add a new slot variable for `var`.

A slot variable is an additional variable associated with `var` to train. It is allocated and managed by optimizers, e.g. `Adam`.

Args
`var` a `Variable` object.
`slot_name` name of the slot variable.
`initializer` initializer of the slot variable
`shape` (Optional) shape of the slot variable. If not set, it will default to the shape of `var`.

Returns
A slot variable.

`apply_gradients`

View source

DP-SGD version of base class method.

`from_config`

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` A Python dictionary, typically the output of get_config.
`custom_objects` A Python dictionary mapping names to additional Python objects used to create this optimizer, such as a function used for a hyperparameter.

Returns
An optimizer instance.

`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.

Returns
Python dictionary.

`get_gradients`

View source

DP-SGD version of base class method.

`get_slot_names`

A list of names for this optimizer's slots.

`get_weights`

Returns the current weights of the optimizer.

The weights of an optimizer are its state (ie, variables). This function returns the weight values associated with this optimizer as a list of Numpy arrays. The first value is always the iterations count of the optimizer, followed by the optimizer's state variables in the order they were created. The returned list can in turn be used to load state into similarly parameterized optimizers.

For example, the RMSprop optimizer for this simple model returns a list of three values-- the iteration count, followed by the root-mean-square value of the kernel and bias of the single Dense layer:

````opt = tf.keras.optimizers.legacy.RMSprop()`
`m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])`
`m.compile(opt, loss='mse')`
`data = np.arange(100).reshape(5, 20)`
`labels = np.zeros(5)`
`results = m.fit(data, labels)  # Training.`
`len(opt.get_weights())`
`3`
```

Returns
Weights values as a list of numpy arrays.

`minimize`

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. If a `Tensor`, the `tape` argument must be passed.
`var_list` list or tuple of `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.
`grad_loss` (Optional). A `Tensor` holding the gradient computed for `loss`.
`name` (Optional) str. Name for the returned operation.
`tape` (Optional) `tf.GradientTape`. If `loss` is provided as a `Tensor`, the tape that computed the `loss` must be provided.

Returns
An `Operation` that updates the variables in `var_list`. The `iterations` will be automatically increased by 1.

Raises
`ValueError` If some of the variables are not `Variable` objects.

`set_weights`

Set the weights of the optimizer.

The weights of an optimizer are its state (ie, variables). This function takes the weight values associated with this optimizer as a list of Numpy arrays. The first value is always the iterations count of the optimizer, followed by the optimizer's state variables in the order they are created. The passed values are used to set the new state of the optimizer.

For example, the RMSprop optimizer for this simple model takes a list of three values-- the iteration count, followed by the root-mean-square value of the kernel and bias of the single Dense layer:

````opt = tf.keras.optimizers.legacy.RMSprop()`
`m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])`
`m.compile(opt, loss='mse')`
`data = np.arange(100).reshape(5, 20)`
`labels = np.zeros(5)`
`results = m.fit(data, labels)  # Training.`
`new_weights = [np.array(10), np.ones([20, 10]), np.zeros([10])]`
`opt.set_weights(new_weights)`
`opt.iterations`
`<tf.Variable 'RMSprop/iter:0' shape=() dtype=int64, numpy=10>`
```

Args
`weights` weight values as a list of numpy arrays.

`variables`

Returns variables of this Optimizer based on the order created.

[]
[]