Ejemplo n.º 1
0
def create_default_exporters(
    t2r_model,
    export_generator,
    compare_fn=create_valid_result_smaller):
  """Creates a list of Exporter to export saved models during evaluation.

  Args:
    t2r_model: The model to be exported.
    export_generator: An export_generator.AbstractExportGenerator.
    compare_fn: The function used to deterimne the best model to export.

  Returns:
    A list containing two exporters, one for numpy and another one for
      tf_example interface.
  """
  if export_generator is None:
    export_generator = default_export_generator.DefaultExportGenerator()
  # Create pkl of the input to save alongside the exported models
  tmpdir = tempfile.mkdtemp()
  in_feature_spec = t2r_model.get_feature_specification_for_packing(
      mode=tf.estimator.ModeKeys.PREDICT)
  in_label_spec = t2r_model.get_label_specification_for_packing(
      mode=tf.estimator.ModeKeys.PREDICT)
  t2r_assets = t2r_pb2.T2RAssets()
  t2r_assets.feature_spec.CopyFrom(in_feature_spec.to_proto())
  t2r_assets.label_spec.CopyFrom(in_label_spec.to_proto())
  t2r_assets_filename = os.path.join(tmpdir,
                                     tensorspec_utils.T2R_ASSETS_FILENAME)
  tensorspec_utils.write_t2r_assets_to_file(t2r_assets, t2r_assets_filename)
  assets = {tensorspec_utils.T2R_ASSETS_FILENAME: t2r_assets_filename}
  export_generator.set_specification_from_model(t2r_model)

  exporters = []
  exporters.append(
      tf.estimator.BestExporter(
          name='best_exporter_numpy',
          compare_fn=compare_fn(),
          serving_input_receiver_fn=export_generator
          .create_serving_input_receiver_numpy_fn(),
          assets_extra=assets))
  exporters.append(
      tf.estimator.BestExporter(
          name='best_exporter_tf_example',
          compare_fn=compare_fn(),
          serving_input_receiver_fn=export_generator
          .create_serving_input_receiver_tf_example_fn(),
          assets_extra=assets))
  exporters.append(
      tf.estimator.LatestExporter(
          name='latest_exporter_numpy',
          serving_input_receiver_fn=export_generator
          .create_serving_input_receiver_numpy_fn(),
          assets_extra=assets))
  exporters.append(
      tf.estimator.LatestExporter(
          name='latest_exporter_tf_example',
          serving_input_receiver_fn=export_generator
          .create_serving_input_receiver_tf_example_fn(),
          assets_extra=assets))
  return exporters
 def _export_fn(export_dir, global_step):
   """The actual closure function creating the exported model and assets."""
   # Create additional assets for the exported models
   t2r_assets.global_step = global_step
   tmpdir = tempfile.mkdtemp()
   t2r_assets_filename = os.path.join(tmpdir,
                                      tensorspec_utils.T2R_ASSETS_FILENAME)
   tensorspec_utils.write_t2r_assets_to_file(t2r_assets, t2r_assets_filename)
   assets = {
       tensorspec_utils.T2R_ASSETS_FILENAME: t2r_assets_filename,
   }
   return estimator.export_saved_model(
       export_dir_base=export_dir,
       serving_input_receiver_fn=export_generator
       .create_serving_input_receiver_numpy_fn(),
       assets_extra=assets)
Ejemplo n.º 3
0
 def _export_fn(export_dir, global_step):
     """The actual closure function creating the exported model and assets."""
     t2r_assets.global_step = global_step
     tmpdir = tempfile.mkdtemp()
     t2r_assets_filename = os.path.join(
         tmpdir, tensorspec_utils.T2R_ASSETS_FILENAME)
     tensorspec_utils.write_t2r_assets_to_file(t2r_assets,
                                               t2r_assets_filename)
     res = estimator.export_saved_model(
         export_dir_base=export_dir,
         serving_input_receiver_fn=self._export_generator.
         create_serving_input_receiver_numpy_fn(),
         assets_extra={
             'tf_serving_warmup_requests': warmup_requests_file,
             tensorspec_utils.T2R_ASSETS_FILENAME: t2r_assets_filename
         })
     return res
Ejemplo n.º 4
0
def _generate_assets(model, export_dir):
  in_feature_spec = model.get_feature_specification_for_packing(
      mode=tf.estimator.ModeKeys.PREDICT)
  in_label_spec = model.get_label_specification_for_packing(
      mode=tf.compat.v1.estimator.ModeKeys.PREDICT)

  in_feature_spec = tensorspec_utils.filter_required_flat_tensor_spec(
      in_feature_spec)
  in_label_spec = tensorspec_utils.filter_required_flat_tensor_spec(
      in_label_spec)

  t2r_assets = t2r_pb2.T2RAssets()
  t2r_assets.feature_spec.CopyFrom(in_feature_spec.to_proto())
  t2r_assets.label_spec.CopyFrom(in_label_spec.to_proto())
  t2r_assets_dir = os.path.join(export_dir,
                                tensorspec_utils.EXTRA_ASSETS_DIRECTORY)

  tf.io.gfile.makedirs(t2r_assets_dir)
  t2r_assets_filename = os.path.join(t2r_assets_dir,
                                     tensorspec_utils.T2R_ASSETS_FILENAME)
  tensorspec_utils.write_t2r_assets_to_file(t2r_assets, t2r_assets_filename)
Ejemplo n.º 5
0
def convert(assets_filepath):
    """Converts existing asset pickle based files to t2r proto based assets."""

    t2r_assets = t2r_pb2.T2RAssets()
    input_spec_filepath = os.path.join(assets_filepath, 'input_specs.pkl')
    if not tf.io.gfile.exists(input_spec_filepath):
        raise ValueError('No file exists for {}.'.format(input_spec_filepath))
    feature_spec, label_spec = tensorspec_utils.load_input_spec_from_file(
        input_spec_filepath)

    t2r_assets.feature_spec.CopyFrom(feature_spec.to_proto())
    t2r_assets.label_spec.CopyFrom(label_spec.to_proto())

    global_step_filepath = os.path.join(assets_filepath, 'global_step.pkl')
    if tf.io.gfile.exists(global_step_filepath):
        global_step = tensorspec_utils.load_input_spec_from_file(
            global_step_filepath)
        t2r_assets.global_step = global_step

    t2r_assets_filepath = os.path.join(assets_filepath,
                                       tensorspec_utils.T2R_ASSETS_FILENAME)
    tensorspec_utils.write_t2r_assets_to_file(t2r_assets, t2r_assets_filepath)