且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用 Tensorflow Serving 提供重新训练的 Inception 模型?

更新时间:2023-12-02 22:05:34

您必须导出模型.我有一个 PR 在再训练期间导出模型.其要点如下:

You have to export the model. I have a PR that exports the model during retraining. The gist of it is below:

import tensorflow as tf

def export_model(sess, architecture, saved_model_dir):
  if architecture == 'inception_v3':
    input_tensor = 'DecodeJpeg/contents:0'
  elif architecture.startswith('mobilenet_'):
    input_tensor = 'input:0'
  else:
    raise ValueError('Unknown architecture', architecture)
  in_image = sess.graph.get_tensor_by_name(input_tensor)
  inputs = {'image': tf.saved_model.utils.build_tensor_info(in_image)}

  out_classes = sess.graph.get_tensor_by_name('final_result:0')
  outputs = {'prediction': tf.saved_model.utils.build_tensor_info(out_classes)}

  signature = tf.saved_model.signature_def_utils.build_signature_def(
    inputs=inputs,
    outputs=outputs,
    method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
  )

  legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')

  # Save out the SavedModel.
  builder = tf.saved_model.builder.SavedModelBuilder(saved_model_dir)
  builder.add_meta_graph_and_variables(
    sess, [tf.saved_model.tag_constants.SERVING],
    signature_def_map={
      tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature
    },
    legacy_init_op=legacy_init_op)
  builder.save()

上面会创建一个变量目录和saved_model.pb文件.如果你把它放在代表版本号的父目录下(例如 1/),那么你可以通过以下方式调用 tensorflow 服务:

Above will create a variables directory and saved_model.pb file. If you put it under a parent directory representing the version number (e.g. 1/) then you can call tensorflow serving via:

tensorflow_model_server --port=9000 --model_name=inception --model_base_path=/path/to/saved_models/