Python 如何在Tensorflow服务中传递词汇表初始化文件

Python 如何在Tensorflow服务中传递词汇表初始化文件,python,tensorflow,tensorflow-serving,Python,Tensorflow,Tensorflow Serving,我创建了一个深度学习模型,使用文本文件初始化Tensorflow中的词汇表,如下所示- class MyModel(object): def __init__(self): table_init = tf.lookup.TextFileInitializer('/home/abhilash/resmap.txt', tf.int64, 0, tf.int64, 1, delimiter=" ") table = tf.lookup.StaticVocabularyTable(t

我创建了一个深度学习模型,使用文本文件初始化Tensorflow中的词汇表,如下所示-

class MyModel(object):

def __init__(self):
    table_init = tf.lookup.TextFileInitializer('/home/abhilash/resmap.txt', tf.int64, 0, tf.int64, 1, delimiter=" ")
    table = tf.lookup.StaticVocabularyTable(table_init, num_oov_buckets)
resmap.txt
文件包含如下条目-

2345 1
3456 2
1234 3
我使用以下代码将TF模型转换为Tensorflow服务-

从模型导入MyModel
使用tf.Session()作为sess:
tf.app.flags.DEFINE_字符串('f','kernel'))
tf.app.flags.DEFINE_integer('model_version',1,'模型的版本号')
tf.app.flags.DEFINE_字符串('save_dir','/home/abhilash','Saving directory'))
FLAGS=tf.app.FLAGS.FLAGS
export_path=os.path.join(tf.compat.as_字节(FLAGS.save_dir),tf.compat.as_字节(str(FLAGS.model_版本)))
打印(“将训练模型导出到”,导出路径)
#创建模型对象并初始化TF图中的所有全局变量。
model=MyModel()
sess.run(tf.global\u variables\u initializer())
sess.run(tf.local\u variables\u initializer())
sess.run(tf.tables\u初始值设定项())
tf.train.Saver().restore(sess、os.path.join('/home/abhilash',model1'))
打印(“模型已还原”)
#SavedModelBuilder对象
builder=tf.saved\u model.builder.SavedModelBuilder(导出路径)
#将张量转换为TensorInfo对象,以便在SignatureDefs中使用
tensor\u info\u input1=tf.saved\u model.utils.build\u tensor\u info(model.input1)
tensor\u info\u input2=tf.saved\u model.utils.build\u tensor\u info(model.input2)
tensor\u info\u prob=tf.saved\u model.utils.build\u tensor\u info(model.logits\u all)
#签名道夫
预测\u签名=(
tf.saved_model.signature_def_utils.build_signature_def(
输入={'input1':张量信息输入1,
“输入2”:张量\u信息\u输入2},
输出={'probs':张量_info_prob},
方法\名称=tf.保存的\模型.签名\常数.预测\方法\名称)
builder.add_meta_graph_和_变量(
sess=sess,
tags=[tf.saved_model.tag_constants.service],
signature_def_map={'predict_prob':prediction_signature},
main_op=tf.tables_initializer(),
strip\u default\u attrs=False,
)
#导出模型
builder.save()
打印('已完成将TF模型导出为SavedModel格式!')
model=MyModel()
实例化TF图结构。
使用上述代码模型成功地转换为
SavedModel
格式。服侍后给出正确的结果

但是当我在不同的机器上服务这个服务时,它会给我一个这样的错误-

Traceback (most recent call last):
  File "/home/abhilashawasthi/anaconda3/envs/mlflow-95a14f155def99fdbaccbe70ebfbcf3065700c56/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1356, in _do_call
    return fn(*args)
  File "/home/abhilashawasthi/anaconda3/envs/mlflow-95a14f155def99fdbaccbe70ebfbcf3065700c56/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1341, in _run_fn
    options, feed_dict, fetch_list, target_list, run_metadata)
  File "/home/abhilashawasthi/anaconda3/envs/mlflow-95a14f155def99fdbaccbe70ebfbcf3065700c56/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1429, in _call_tf_sessionrun
    run_metadata)
tensorflow.python.framework.errors_impl.NotFoundError: /home/abhilash/resmap.txt; No such file or directory
     [[{{node text_file_init/InitializeTableFromTextFileV2}}]]
也就是说,它尝试在同一位置查找该文本文件。
那么,如何传递此文本文件,使其与
SavedModel
捆绑在一起呢

我在TF服务文档中看到,我们可以将资产传递给服务提供商。但不知道该怎么做。没有明确的例子可用。

有人能告诉我怎么通过吗

要从任何PC进行推理,包含词汇表的文本文件应放在资产文件夹中,该文件夹位于与保存的模型对应的文件夹中的版本编号文件夹

因此,与其将文本文件
resmap.txt
保存在/home/abhilash/resmap.txt中,不如将其保存在
/home/abhilash/Saved_Model/1/assets/resmap.txt

现在,当您尝试在其他计算机中执行推理时,您将复制文件夹Saved_Model中保存的模型,因此推理工作,因为Vocab文件存在于保存的模型中

请查看下面的屏幕截图以获得更清晰的信息