Example #1
0
    def _infer_metadata_entries_from_model(self, signature_name):
        """Infers metadata inputs and outputs."""
        loaded_sig = self._loaded_model.signatures[signature_name]
        _, input_sig = loaded_sig.structured_input_signature
        output_sig = loaded_sig.structured_outputs
        input_mds = {}
        for name, tensor_spec in input_sig.items():
            if tensor_spec.dtype.is_floating:
                input_mds[name] = explain_metadata.InputMetadata(name, name)
            else:
                input_mds[name] = explain_metadata.InputMetadata(
                    name, name, modality=explain_metadata.Modality.CATEGORICAL)

        if not self._explain_output and len(output_sig) > 1:
            raise ValueError(
                "Signature has multiple outputs. You must specify which"
                " output to explain via 'outputs_to_explain' parameter.")
        for name in output_sig:
            if not self._explain_output or self._explain_output[0] == name:
                output_mds = {
                    name: explain_metadata.OutputMetadata(name, name)
                }
                break
        else:
            raise ValueError("Specified output name cannot be found in given"
                             " signature outputs.")
        return input_mds, output_mds
def _create_output_metadata_from_signature(
    signature_outputs: Dict[str, tf.Tensor],
    output_to_explain: Optional[str] = None
    ) -> Dict[str, explain_metadata.OutputMetadata]:
  """Creates OutputMetadata from signature outputs."""
  return {key: explain_metadata.OutputMetadata(key, tensor.name)
          for key, tensor in signature_outputs.items()
          if not output_to_explain or output_to_explain == key}
  def _create_output_metadata(self, output_dict: Dict[Text, tf.Tensor]):
    """Creates and returns a list of OutputMetadata.

    Args:
      output_dict: Dictionary from tf.feature_columns to list of dense tensors.

    Returns:
      A list of OutputMetadata.
    """
    return [explain_metadata.OutputMetadata(name, tensor.name)
            for name, tensor in output_dict.items()]
Example #4
0
    def add_output_metadata(self, output_tensor, name=None):
        """Adds output tensor as output metadata.

    Only one output metadata can be added.

    Args:
      output_tensor: Output tensors to get the explanations for. Needs to be a
        tensor of float type, such as probabilities, logits.
      name: Unique friendly name for the output.
    """
        if self._outputs:
            raise ValueError('Only one output can be added.')

        output_name = name if name else output_tensor.op.name
        self._outputs[output_tensor.name] = explain_metadata.OutputMetadata(
            name=output_name, output_tensor_name=output_tensor.name)
Example #5
0
    def set_output_metadata(self, output_name, new_name):
        """Updates an existing output metadata identified by output_name.

    Args:
      output_name: Name of the output that needs to be updated.
      new_name: New (unique) friendly name for the output.

    Raises:
      ValueError: If output with the given name doesn't exist.
    """
        if output_name not in self._outputs:
            raise ValueError("Output with name '%s' does not exist." %
                             output_name)
        if output_name == new_name:
            return
        old_output = self._outputs.pop(output_name)
        self._outputs[new_name] = explain_metadata.OutputMetadata(
            new_name, old_output.output_tensor_name)