Пример #1
0
    def test_infer(self, mock_call_servo):
        self.plugin.examples = [
            self.get_fake_example(0),
            self.get_fake_example(1),
            self.get_fake_example(2),
        ]
        self.plugin.updated_example_indices = set([0, 2])

        inference_result_proto = regression_pb2.RegressionResponse()
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.45
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.55
        mock_call_servo.return_value = inference_result_proto

        response = self.server.get(
            "/data/plugin/whatif/infer?" +
            urllib_parse.urlencode({
                "inference_address": "addr",
                "model_name": "name",
                "model_type": "regression",
                "model_version": ",",
                "model_signature": ",",
            }))

        self.assertEqual(200, response.status_code)
        self.assertEqual(0, len(self.plugin.updated_example_indices))
        inferences = json.loads(
            json.loads(response.get_data().decode("utf-8"))["inferences"])
        self.assertTrue(0 in inferences["indices"])
        self.assertFalse(1 in inferences["indices"])
        self.assertTrue(2 in inferences["indices"])
Пример #2
0
    def test_make_json_formatted_for_single_chart_regression(self):
        """Test making a regression chart with a single point on it."""
        inference_result_proto = regression_pb2.RegressionResponse()
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.45
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.55

        original_feature = inference_utils.OriginalFeatureList(
            'feature_name', [2.], 'float_list')
        mutant_feature = inference_utils.MutantFeatureValue(original_feature,
                                                            index=0,
                                                            mutant_value=20)
        mutant_feature_2 = inference_utils.MutantFeatureValue(original_feature,
                                                              index=0,
                                                              mutant_value=10)

        jsonable = inference_utils.make_json_formatted_for_single_chart(
            [mutant_feature, mutant_feature_2], inference_result_proto, 0)

        self.assertEqual(['value'], list(jsonable.keys()))
        self.assertEqual(2, len(jsonable['value']))
        self.assertEqual(10, jsonable['value'][0]['step'])
        self.assertAlmostEqual(0.55, jsonable['value'][0]['scalar'])
        self.assertEqual(20, jsonable['value'][1]['step'])
        self.assertAlmostEqual(0.45, jsonable['value'][1]['scalar'])
Пример #3
0
    def test_infer(self, mock_call_servo):
        self.plugin.examples = [
            self.get_fake_example(0),
            self.get_fake_example(1),
            self.get_fake_example(2)
        ]
        self.plugin.updated_example_indices = set([0, 2])

        inference_result_proto = regression_pb2.RegressionResponse()
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.45
        regression = inference_result_proto.result.regressions.add()
        regression.value = 0.55
        mock_call_servo.return_value = inference_result_proto

        response = self.server.get(
            '/data/plugin/whatif/infer?' +
            urllib_parse.urlencode({
                'inference_address': 'addr',
                'model_name': 'name',
                'model_type': 'regression',
                'model_version': ',',
                'model_signature': ',',
            }))

        self.assertEqual(200, response.status_code)
        self.assertEqual(0, len(self.plugin.updated_example_indices))
        inferences = json.loads(
            json.loads(response.get_data().decode('utf-8'))['inferences'])
        self.assertTrue(0 in inferences['indices'])
        self.assertFalse(1 in inferences['indices'])
        self.assertTrue(2 in inferences['indices'])
Пример #4
0
def convert_prediction_values(values, serving_bundle, model_spec=None):
    """Converts tensor values into ClassificationResponse or
    RegressionResponse.

    Args:
      values: For classification, a 2D list of numbers. The first dimension is for
        each example being predicted. The second dimension are the probabilities
        for each class ID in the prediction. For regression, a 1D list of numbers,
        with a regression score for each example being predicted.
      serving_bundle: A `ServingBundle` object that contains the information about
        the serving request that the response was generated by.
      model_spec: Optional model spec to put into the response.

    Returns:
      A ClassificationResponse or RegressionResponse.
    """
    if serving_bundle.model_type == "classification":
        response = classification_pb2.ClassificationResponse()
        for example_index in range(len(values)):
            classification = response.result.classifications.add()
            for class_index in range(len(values[example_index])):
                class_score = classification.classes.add()
                class_score.score = values[example_index][class_index]
                class_score.label = str(class_index)
    else:
        response = regression_pb2.RegressionResponse()
        for example_index in range(len(values)):
            regression = response.result.regressions.add()
            regression.value = values[example_index]
    if model_spec:
        response.model_spec.CopyFrom(model_spec)
    return response
Пример #5
0
def convert_predict_response(pred, serving_bundle):
    """Converts a PredictResponse to ClassificationResponse or RegressionResponse.

  Args:
    pred: PredictResponse to convert.
    serving_bundle: A `ServingBundle` object that contains the information about
      the serving request that the response was generated by.

  Returns:
    A ClassificationResponse or RegressionResponse.
  """
    output = pred.outputs[serving_bundle.predict_output_tensor]
    raw_output = output.float_val
    output_index = 0
    if serving_bundle.model_type == 'classification':
        response = classification_pb2.ClassificationResponse()
        response.model_spec.CopyFrom(pred.model_spec)
        for _ in range(output.tensor_shape.dim[0].size):
            classification = response.result.classifications.add()
            for class_index in range(output.tensor_shape.dim[1].size):
                class_score = classification.classes.add()
                class_score.score = raw_output[output_index]
                output_index += 1
                class_score.label = str(class_index)
    else:
        response = regression_pb2.RegressionResponse()
        response.model_spec.CopyFrom(pred.model_spec)
        for _ in range(output.tensor_shape.dim[0].size):
            regression = response.result.regressions.add()
            regression.value = raw_output[output_index]
            output_index += 1
    return response
Пример #6
0
  def test_wrap_inference_results_regression(self):
    """Test wrapping a regression result."""
    inference_result_proto = regression_pb2.RegressionResponse()
    regression = inference_result_proto.result.regressions.add()
    regression.value = 0.45
    regression = inference_result_proto.result.regressions.add()
    regression.value = 0.55

    wrapped = inference_utils.wrap_inference_results(inference_result_proto)
    self.assertEqual(2, len(wrapped.regression_result.regressions))