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"])
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'])
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'])
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
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
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))