예제 #1
0
 def testTranslateNumericDTypes(self):
     x = np.zeros([2, 2], dtype=np.float32)
     self.assertEqual('float32', tensor_helper.translate_dtype(x.dtype))
     x = np.zeros([2], dtype=np.int16)
     self.assertEqual('int16', tensor_helper.translate_dtype(x.dtype))
     x = np.zeros([], dtype=np.uint8)
     self.assertEqual('uint8', tensor_helper.translate_dtype(x.dtype))
  def query(self, time_indices):
    """Query the values at given time indices.

    Args:
      time_indices: 0-based time indices to query, as a `list` of `int`.

    Returns:
      Values as a list of `numpy.ndarray` (for time indices in memory) or
      `None` (for time indices discarded).
    """
    if self._disposed:
      raise ValueError(
          'Cannot query: this _WatchStore instance is already disposed')
    if not isinstance(time_indices, (tuple, list)):
      time_indices = [time_indices]
    output = []
    for time_index in time_indices:
      if isinstance(self._data[time_index], _TensorValueDiscarded):
        output.append(None)
      else:
        data_item = self._data[time_index]
        if (hasattr(data_item, 'dtype') and
            tensor_helper.translate_dtype(data_item.dtype) == 'string'):
          _, _, data_item = tensor_helper.array_view(data_item)
          data_item = np.array(
              tensor_helper.process_buffers_for_display(data_item),
              dtype=np.object)
        output.append(data_item)

    return output
def _comm_tensor_data(device_name, node_name, maybe_base_expanded_node_name,
                      output_slot, debug_op, tensor_value, wall_time):
    """Create a dict() as the outgoing data in the tensor data comm route.

  Note: The tensor data in the comm route does not include the value of the
  tensor in its entirety in general. Only if a tensor satisfies the following
  conditions will its entire value be included in the return value of this
  method:
  1. Has a numeric data type (e.g., float32, int32) and has fewer than 5
     elements.
  2. Is a string tensor and has fewer than 5 elements. Each string element is
     up to 40 bytes.

  Args:
    device_name: Name of the device that the tensor is on.
    node_name: (Original) name of the node that produces the tensor.
    maybe_base_expanded_node_name: Possbily base-expanded node name.
    output_slot: Output slot number.
    debug_op: Name of the debug op.
    tensor_value: Value of the tensor, as a numpy.ndarray.
    wall_time: Wall timestamp for the tensor.

  Returns:
    A dict representing the tensor data.
  """
    output_slot = int(output_slot)
    tf.logging.info('Recording tensor value: %s, %d, %s', node_name,
                    output_slot, debug_op)
    tensor_values = None
    if isinstance(tensor_value, debug_data.InconvertibleTensorProto):
        if not tensor_value.initialized:
            tensor_dtype = UNINITIALIZED_TAG
            tensor_shape = UNINITIALIZED_TAG
        else:
            tensor_dtype = UNSUPPORTED_TAG
            tensor_shape = UNSUPPORTED_TAG
        tensor_values = NA_TAG
    else:
        tensor_dtype = tensor_helper.translate_dtype(tensor_value.dtype)
        tensor_shape = tensor_value.shape

        # The /comm endpoint should respond with tensor values only if the tensor is
        # small enough. Otherwise, the detailed values sould be queried through a
        # dedicated tensor_data that supports slicing.
        if tensor_helper.numel(tensor_shape) < 5:
            _, _, tensor_values = tensor_helper.array_view(tensor_value)
            if tensor_dtype == 'string' and tensor_value is not None:
                tensor_values = tensor_helper.process_buffers_for_display(
                    tensor_values, limit=STRING_ELEMENT_MAX_LEN)

    return {
        'type': 'tensor',
        'timestamp': wall_time,
        'data': {
            'device_name': device_name,
            'node_name': node_name,
            'maybe_base_expanded_node_name': maybe_base_expanded_node_name,
            'output_slot': output_slot,
            'debug_op': debug_op,
            'dtype': tensor_dtype,
            'shape': tensor_shape,
            'values': tensor_values,
        },
    }
예제 #4
0
 def testTranslateStringDType(self):
     x = np.array(['abc'], dtype=np.object)
     self.assertEqual('string', tensor_helper.translate_dtype(x.dtype))
예제 #5
0
 def testTranslateBooleanDType(self):
     x = np.zeros([2, 2], dtype=np.bool)
     self.assertEqual('bool', tensor_helper.translate_dtype(x.dtype))
def _comm_tensor_data(device_name,
                      node_name,
                      maybe_base_expanded_node_name,
                      output_slot,
                      debug_op,
                      tensor_value,
                      wall_time):
  """Create a dict() as the outgoing data in the tensor data comm route.

  Note: The tensor data in the comm route does not include the value of the
  tensor in its entirety in general. Only if a tensor satisfies the following
  conditions will its entire value be included in the return value of this
  method:
  1. Has a numeric data type (e.g., float32, int32) and has fewer than 5
     elements.
  2. Is a string tensor and has fewer than 5 elements. Each string element is
     up to 40 bytes.

  Args:
    device_name: Name of the device that the tensor is on.
    node_name: (Original) name of the node that produces the tensor.
    maybe_base_expanded_node_name: Possbily base-expanded node name.
    output_slot: Output slot number.
    debug_op: Name of the debug op.
    tensor_value: Value of the tensor, as a numpy.ndarray.
    wall_time: Wall timestamp for the tensor.

  Returns:
    A dict representing the tensor data.
  """
  output_slot = int(output_slot)
  tf.logging.info(
      'Recording tensor value: %s, %d, %s', node_name, output_slot, debug_op)
  tensor_values = None
  if isinstance(tensor_value, debug_data.InconvertibleTensorProto):
    if not tensor_value.initialized:
      tensor_dtype = UNINITIALIZED_TAG
      tensor_shape = UNINITIALIZED_TAG
    else:
      tensor_dtype = UNSUPPORTED_TAG
      tensor_shape = UNSUPPORTED_TAG
    tensor_values = NA_TAG
  else:
    tensor_dtype = tensor_helper.translate_dtype(tensor_value.dtype)
    tensor_shape = tensor_value.shape

    # The /comm endpoint should respond with tensor values only if the tensor is
    # small enough. Otherwise, the detailed values sould be queried through a
    # dedicated tensor_data that supports slicing.
    if tensor_helper.numel(tensor_shape) < 5:
      _, _, tensor_values = tensor_helper.array_view(tensor_value)
      if tensor_dtype == 'string' and tensor_value is not None:
        tensor_values = tensor_helper.process_buffers_for_display(
            tensor_values, limit=STRING_ELEMENT_MAX_LEN)

  return {
      'type': 'tensor',
      'timestamp': wall_time,
      'data': {
          'device_name': device_name,
          'node_name': node_name,
          'maybe_base_expanded_node_name': maybe_base_expanded_node_name,
          'output_slot': output_slot,
          'debug_op': debug_op,
          'dtype': tensor_dtype,
          'shape': tensor_shape,
          'values': tensor_values,
      },
  }