コード例 #1
0
    def testBuildSignatureDef(self):
        # Force the test to run in graph mode.
        # This tests a deprecated v1 API that uses functionality that does not work
        # with eager tensors (namely build_tensor_info).
        with ops.Graph().as_default():
            x = array_ops.placeholder(dtypes.float32, 1, name="x")
            x_tensor_info = utils.build_tensor_info(x)
            inputs = {}
            inputs["foo-input"] = x_tensor_info

            y = array_ops.placeholder(dtypes.float32, name="y")
            y_tensor_info = utils.build_tensor_info(y)
            outputs = {}
            outputs["foo-output"] = y_tensor_info

        signature_def = signature_def_utils_impl.build_signature_def(
            inputs, outputs, "foo-method-name")
        self.assertEqual("foo-method-name", signature_def.method_name)

        # Check inputs in signature def.
        self.assertEqual(1, len(signature_def.inputs))
        x_tensor_info_actual = signature_def.inputs["foo-input"]
        self.assertEqual("x:0", x_tensor_info_actual.name)
        self.assertEqual(types_pb2.DT_FLOAT, x_tensor_info_actual.dtype)
        self.assertEqual(1, len(x_tensor_info_actual.tensor_shape.dim))
        self.assertEqual(1, x_tensor_info_actual.tensor_shape.dim[0].size)

        # Check outputs in signature def.
        self.assertEqual(1, len(signature_def.outputs))
        y_tensor_info_actual = signature_def.outputs["foo-output"]
        self.assertEqual("y:0", y_tensor_info_actual.name)
        self.assertEqual(types_pb2.DT_FLOAT, y_tensor_info_actual.dtype)
        self.assertEqual(0, len(y_tensor_info_actual.tensor_shape.dim))
コード例 #2
0
  def testBuildSignatureDef(self):
    x = array_ops.placeholder(dtypes.float32, 1, name="x")
    x_tensor_info = utils.build_tensor_info(x)
    inputs = {}
    inputs["foo-input"] = x_tensor_info

    y = array_ops.placeholder(dtypes.float32, name="y")
    y_tensor_info = utils.build_tensor_info(y)
    outputs = {}
    outputs["foo-output"] = y_tensor_info

    signature_def = signature_def_utils_impl.build_signature_def(
        inputs, outputs, "foo-method-name")
    self.assertEqual("foo-method-name", signature_def.method_name)

    # Check inputs in signature def.
    self.assertEqual(1, len(signature_def.inputs))
    x_tensor_info_actual = signature_def.inputs["foo-input"]
    self.assertEqual("x:0", x_tensor_info_actual.name)
    self.assertEqual(types_pb2.DT_FLOAT, x_tensor_info_actual.dtype)
    self.assertEqual(1, len(x_tensor_info_actual.tensor_shape.dim))
    self.assertEqual(1, x_tensor_info_actual.tensor_shape.dim[0].size)

    # Check outputs in signature def.
    self.assertEqual(1, len(signature_def.outputs))
    y_tensor_info_actual = signature_def.outputs["foo-output"]
    self.assertEqual("y:0", y_tensor_info_actual.name)
    self.assertEqual(types_pb2.DT_FLOAT, y_tensor_info_actual.dtype)
    self.assertEqual(0, len(y_tensor_info_actual.tensor_shape.dim))
コード例 #3
0
  def testBuildSignatureDef(self):
    x = array_ops.placeholder(dtypes.float32, 1, name="x")
    x_tensor_info = utils.build_tensor_info(x)
    inputs = {}
    inputs["foo-input"] = x_tensor_info

    y = array_ops.placeholder(dtypes.float32, name="y")
    y_tensor_info = utils.build_tensor_info(y)
    outputs = {}
    outputs["foo-output"] = y_tensor_info

    signature_def = signature_def_utils_impl.build_signature_def(
        inputs, outputs, "foo-method-name")
    self.assertEqual("foo-method-name", signature_def.method_name)

    # Check inputs in signature def.
    self.assertEqual(1, len(signature_def.inputs))
    x_tensor_info_actual = signature_def.inputs["foo-input"]
    self.assertEqual("x:0", x_tensor_info_actual.name)
    self.assertEqual(types_pb2.DT_FLOAT, x_tensor_info_actual.dtype)
    self.assertEqual(1, len(x_tensor_info_actual.tensor_shape.dim))
    self.assertEqual(1, x_tensor_info_actual.tensor_shape.dim[0].size)

    # Check outputs in signature def.
    self.assertEqual(1, len(signature_def.outputs))
    y_tensor_info_actual = signature_def.outputs["foo-output"]
    self.assertEqual("y:0", y_tensor_info_actual.name)
    self.assertEqual(types_pb2.DT_FLOAT, y_tensor_info_actual.dtype)
    self.assertEqual(0, len(y_tensor_info_actual.tensor_shape.dim))
コード例 #4
0
def _make_signature(inputs, outputs, name=None):
    input_info = {
        input_name: utils.build_tensor_info(tensor)
        for input_name, tensor in inputs.items()
    }
    output_info = {
        output_name: utils.build_tensor_info(tensor)
        for output_name, tensor in outputs.items()
    }
    return signature_def_utils_impl.build_signature_def(
        input_info, output_info, name)
コード例 #5
0
def _make_signature(inputs, outputs, name=None):
  input_info = {
      input_name: utils.build_tensor_info(tensor)
      for input_name, tensor in inputs.items()
  }
  output_info = {
      output_name: utils.build_tensor_info(tensor)
      for output_name, tensor in outputs.items()
  }
  return signature_def_utils_impl.build_signature_def(input_info, output_info,
                                                      name)
コード例 #6
0
def main(_):
	print("Start the training...")
	
	#import model
	model = VGG16(weights = 'imagenet', include_top = True)
	sgd = SGD(lr = 0.1, decay = 1e-6, momentum = 0.9, nesterov = True)

	#compile the model
	model.compile(optimizer = sgd, loss = 'categorical_crossentropy')

	#view the properties of the model
	model.summary()

	#get input layer
	input_layer = model.get_layer('input_1')
	input_layer_in = input_layer.input
	print("The input layer: ", input_layer_in)

	#get predictions layer
	predictions_layer = model.get_layer('predictions')
	predictions_layer_out = predictions_layer.output
	print("The predictions layer: ", predictions_layer_out)

	#convert input layer and predictions layer from tensor to tensor info
	input_layer_in_info = build_tensor_info(input_layer_in)
	predictions_layer_out_info = build_tensor_info(predictions_layer_out)

	#export model
	K.set_learning_phase(0)
	export_path_base = "./vgg16"
	model_version = "1"
	export_path = os.path.join(
		tf.compat.as_bytes(export_path_base),
		tf.compat.as_bytes(model_version))
	print("Exporting trained model to: ", export_path)

	prediction_signature = build_signature_def(
		inputs = {'images': input_layer_in_info},
		outputs = {'scores': predictions_layer_out_info},
		method_name = signature_constants.PREDICT_METHOD_NAME)

	builder = saved_model_builder.SavedModelBuilder(export_path)
	with K.get_session() as sess:
		builder.add_meta_graph_and_variables(
			sess = sess,
			tags = [tag_constants.SERVING],
			signature_def_map = {'predict_images': prediction_signature})
		builder.save()
	
	#clear session	
	K.clear_session()
	print("Done exporting!")
コード例 #7
0
def _create_signature(model, class_names: List[str], top_k: Optional[int]):
    serialized_tf_example = array_ops.placeholder(tf.string, name="tf_example")
    feature_configs = {"x": tf.io.FixedLenFeature([], tf.string)}
    tf_example = tf.io.parse_example(serialized_tf_example, feature_configs)
    jpegs = tf_example["x"]
    x = tf.map_fn(_preprocess_image, jpegs, dtype=tf.float32)
    y = model(x)

    top_k = min(top_k or len(class_names), len(class_names))
    values, indices = tf.nn.top_k(y, top_k)
    table_class_names = lookup_ops.index_to_string_table_from_tensor(
        vocabulary_list=tf.constant(class_names),
        default_value="UNK",
        name=None)
    classification_inputs = build_tensor_info(serialized_tf_example)
    prediction_class_names = table_class_names.lookup(
        tf.cast(indices, dtype=dtypes.int64))
    classification_outputs_class_names = build_tensor_info(
        prediction_class_names)
    classification_outputs_scores = build_tensor_info(values)
    classification_signature = build_signature_def(
        inputs={sig_consts_v1.CLASSIFY_INPUTS: classification_inputs},
        outputs={
            sig_consts_v1.CLASSIFY_OUTPUT_CLASSES:
            classification_outputs_class_names,
            sig_consts_v1.CLASSIFY_OUTPUT_SCORES:
            classification_outputs_scores,
        },
        method_name=sig_consts_v1.CLASSIFY_METHOD_NAME,
    )

    # Ensure valid signature
    if not is_valid_signature(classification_signature):
        raise ValueError("Invalid classification signature!")

    return classification_signature
コード例 #8
0
 def _assertInvalidSignature(self, inputs, outputs, method_name):
     signature_def = signature_def_utils_impl.build_signature_def(
         inputs, outputs, method_name)
     self.assertFalse(
         signature_def_utils_impl.is_valid_signature(signature_def))
コード例 #9
0
def main(_):
    print("Start the training...")

    #import model
    model = VGG16(weights='imagenet',
                  include_top=True,
                  input_shape=(224, 224, 3))

    #get input layer
    input_layer = model.get_layer('input_1')
    input_layer_in = input_layer.input

    #get block5_pool layer
    block5_pool = model.get_layer('block5_pool')
    block5_pool_out = block5_pool.output

    #get prediction layer
    predictions_layer = model.get_layer('predictions')
    predictions_layer_out = predictions_layer.output

    #create new model using additional output of bottleneck features
    vgg16_b_f_model = Model(inputs=input_layer_in,
                            outputs=[block5_pool_out, predictions_layer_out])

    #view the summary of the new model
    vgg16_b_f_model.summary()

    #get input layer
    b_f_input_layer = vgg16_b_f_model.get_layer('input_1')
    b_f_input_layer_in = b_f_input_layer.input
    print("The input layer: ", b_f_input_layer_in)

    #get output layer
    vgg16_b_f_outputs = vgg16_b_f_model.outputs

    #convert input layer, block5 pool layer, and predictions layer from tensor to tensor info
    input_layer_in_info = build_tensor_info(b_f_input_layer_in)
    block5_pool_out_info = build_tensor_info(vgg16_b_f_outputs[0])
    predictions_layer_out_info = build_tensor_info(vgg16_b_f_outputs[1])
    print("The block5_pool layer: ", block5_pool_out_info)
    print("The predictions layer: ", predictions_layer_out_info)

    #export model
    K.set_learning_phase(0)
    export_path_base = "./vgg16_bottleneck-features"
    model_version = "1"
    export_path = os.path.join(tf.compat.as_bytes(export_path_base),
                               tf.compat.as_bytes(model_version))
    print("Exporting trained model to: ", export_path)

    prediction_signature = build_signature_def(
        inputs={'images': input_layer_in_info},
        outputs={
            'scores_1': block5_pool_out_info,
            'scores_2': predictions_layer_out_info
        },
        method_name=signature_constants.PREDICT_METHOD_NAME)

    builder = saved_model_builder.SavedModelBuilder(export_path)
    with K.get_session() as sess:
        builder.add_meta_graph_and_variables(
            sess=sess,
            tags=[tag_constants.SERVING],
            signature_def_map={'predict_images': prediction_signature})
        builder.save()

    #clear session
    K.clear_session()
    print("Done exporting!")
コード例 #10
0
 def _assertInvalidSignature(self, inputs, outputs, method_name):
   signature_def = signature_def_utils_impl.build_signature_def(
       inputs, outputs, method_name)
   self.assertFalse(
       signature_def_utils_impl.is_valid_signature(signature_def))