Generate one input sequence and output label.

    Each sequences of objects has a feature that consists of the feature vector
    for that object plus the encoding for its ID, the reference vector ID and
    the n-th value relative ID for a total feature size of:

      `num_objects` * 3  + `num_features`

    Args:
      num_objects: int. number of objects in the sequence.
      num_features: int. feature size of each object.

    Returns:
      1. np.ndarray (`num_objects`, (`num_features` + 3 * `num_objects`)).
      2. np.ndarray (1,). Output object reference label.

def _get_single_set(self, num_objects, num_features):
    """Generate one input sequence and output label.

    Each sequences of objects has a feature that consists of the feature vector
    for that object plus the encoding for its ID, the reference vector ID and
    the n-th value relative ID for a total feature size of:

      `num_objects` * 3  + `num_features`

    Args:
      num_objects: int. number of objects in the sequence.
      num_features: int. feature size of each object.

    Returns:
      1. np.ndarray (`num_objects`, (`num_features` + 3 * `num_objects`)).
      2. np.ndarray (1,). Output object reference label.
    """
    # Generate random binary vectors
    data = np.random.uniform(-1, 1, size=(num_objects, num_features))

    distances = spdistance.squareform(spdistance.pdist(data))
    distance_idx = np.argsort(distances)

    # Choose random distance
    nth = np.random.randint(0, num_objects)

    # Pick out the nth furthest for each object
    nth_furthest = distance_idx[:, nth]

    # Choose random reference object
    reference = np.random.randint(0, num_objects)

    # Get identity of object that is the nth furthest from reference object
    labels = nth_furthest[reference]

    # Compile data
    object_ids = np.identity(num_objects)
    nth_matrix = np.zeros((num_objects, num_objects))
    nth_matrix[:, nth] = 1
    reference_object = np.zeros((num_objects, num_objects))
    reference_object[:, reference] = 1

    inputs = np.concatenate([data, object_ids, reference_object, nth_matrix],
                            axis=-1)
    inputs = np.random.permutation(inputs)
    labels = np.expand_dims(labels, axis=0)
    return inputs.astype(np.float32), labels.astype(np.float32)