def call()

in tensorflow_model_remediation/min_diff/keras/models/min_diff_model.py [0:0]


  def call(self, inputs, training=None, mask=None):
    # pyformat: disable
    """Calls `original_model` with optional `min_diff_loss` as regularization loss.

    Args:
      inputs: Inputs to original_model, optionally containing `min_diff_data` as
        described below.
      training: Boolean indicating whether to run in training or inference mode.
        See `tf.keras.Model.call` for details.
      mask: Mask or list of masks as described in `tf.keras.Model.call`.

    Note: Like `tf.keras.Model.call`, this method should not be called directly.
    To call a model on an input, always use the `__call__` method,
    i.e. `model(inputs)`, which relies on the `call` method internally.

    This method should be used the same way as `tf.keras.Model.call`. Depending
    on whether you are in train mode, `inputs` may need to include
    `min_diff_data` (see `MinDiffModel.compute_min_diff_data` for details on
    what form that needs to take).

    - If `training=True`: `inputs` must contain `min_diff_data` (see details
      below).
    - If `training=False`: including `min_diff_data` is optional.

    If present, the `min_diff_loss` is added by calling `self.add_loss` and will
    show up in `self.losses`.

    ```
    model = ...  # MinDiffModel.

    dataset = ...  # Dataset containing min_diff_data.

    for batch in dataset.take(1):
      model(batch, training=True)

    model.losses[0]  # First element(s) will be the min_diff_loss(es).
    ```

    Including `min_diff_data` in `inputs` implies that
    `MinDiffModel.unpack_original_inputs` and
    `MinDiffModel.unpack_min_diff_data` behave as expected when called on
    `inputs` (see methods for details).

    This condition is satisfied with the default implementations if you use
    `min_diff.keras.utils.pack_min_diff_data` to create the dataset that
    includes `min_diff_data`.


    Returns:
      A `tf.Tensor` or nested structure of `tf.Tensor`s according to the
      behavior `original_model`. See `tf.keras.Model.call` for details.

    Raises:
      ValueError: If `training` is set to `True` but `inputs` does not include
        `min_diff_data`.
    """
    # pyformat: enable
    original_inputs = self.unpack_original_inputs(inputs)
    min_diff_data = self.unpack_min_diff_data(inputs)

    # If training is True, we require min_diff_data to be available.
    if training and min_diff_data is None:
      raise ValueError(
          "call `inputs` must contain MinDiffData during training.")

    # Add min_diff_loss if min_diff_data is available.
    if min_diff_data is not None:
      min_diff_loss = self.compute_min_diff_loss(
          min_diff_data, training=training)
      # Add min_diff_loss(es) as regularization loss(es).
      tf.nest.map_structure(self.add_loss, min_diff_loss)

    return self._call_original_model(
        original_inputs, training=training, mask=mask)