class_docstr: BoltOn episilon-delta differential privacy model.
  
  The privacy guarantees are dependent on the noise that is sampled. Please
  see the paper linked below for more details.
  
  Uses 4 key steps to achieve privacy guarantees:
  1. Adds noise to weights after training (output perturbation).
  2. Projects weights to R after each batch
  3. Limits learning rate
  4. Use a strongly convex loss function (see compile)
  
  For more details on the strong convexity requirements, see:
  Bolt-on Differential Privacy for Scalable Stochastic Gradient
  Descent-based Analytics by Xi Wu et al.
docstr: Private constructor.
  
  Args:
      n_outputs: number of output classes to predict.
      seed: random seed to use
      dtype: data type to use for tensors
docstr_tok: ["Private","constructor",".","Args",":","n_outputs",":","number","of","output","classes","to","predict",".","seed",":","random","seed","to","use","dtype",":","data","type","to","use","for","tensors"]
code: def __init__(self, n_outputs, seed=1, dtype=tf.float32):
      """Private constructor.
  
      Args:
          n_outputs: number of output classes to predict.
          seed: random seed to use
          dtype: data type to use for tensors
      """
      super(BoltOnModel, self).__init__(name="bolton", dynamic=False)
      if n_outputs <= 0:
          raise ValueError(
              "n_outputs = {0} is not valid. Must be > 0.".format(
                  n_outputs
              )
          )
      self.n_outputs = n_outputs
      self.seed = seed
      self._layers_instantiated = False
      self._dtype = dtype
  
file_path: privacy/tensorflow_privacy/privacy/bolt_on/models.py
imports: import tensorflow.compat.v1
  from tensorflow.compat.v1.python.framework import ops
  from tensorflow.compat.v1.python.keras import optimizers
  from tensorflow.compat.v1.python.keras.models import Model
  from tensorflow_privacy.privacy.bolt_on.losses import StrongConvexMixin
  from tensorflow_privacy.privacy.bolt_on.optimizers import BoltOn
label_desc: Use image node_id 1 to create a new BoltOnModel object from inherited base classes: Model with example: obj = BoltOnModel(n_outputs, seed, dtype)