我训练了 nmt 模型,我想导出模型并将其部署在tensorflow服务上。但是我有些问题让我困惑了几天:
答案 0 :(得分:1)
这个答案错了!
我找到了输出模型的正确方法,并且与tf服务配合得很好。
在tensorflow/nmt访问我的tensorflow/nmt
分叉,或转到拉取请求:pull request#344
我找到了导出模型的方法!
这是我的代码:
if not self.model_dir:
raise ValueError("Please specified a model dir.")
export_path = os.path.join(
tf.compat.as_bytes(self.export_base_path),
tf.compat.as_bytes(str(self.version_number))
)
config = tf.ConfigProto(allow_soft_placement=True)
sess = tf.Session(config=config)
saver = tf.train.import_meta_graph(os.path.join(self.model_dir, "translate.ckpt-21000.meta"))
latest_ckpt = tf.train.latest_checkpoint(self.model_dir)
saver.restore(sess, latest_ckpt)
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
feature_configs = {
'x': tf.FixedLenFeature(shape=[], dtype=tf.string),
'y': tf.FixedLenFeature(shape=[], dtype=tf.string)
}
serialized_example = tf.placeholder(tf.string, name="tf_example")
tf_example = tf.parse_example(serialized_example, feature_configs)
x = tf.identity(tf_example['x'], name='x')
y = tf.identity(tf_example['y'], name='y')
# predict_input = tf.saved_model.utils.build_tensor_info(x)
# predict_output = tf.saved_model.utils.build_tensor_info(y)
predict_input = x
predict_output = y
predict_signature_def_map = tf.saved_model.signature_def_utils.predict_signature_def(
inputs={
tf.saved_model.signature_constants.PREDICT_INPUTS: predict_input
},
outputs={
tf.saved_model.signature_constants.PREDICT_OUTPUTS: predict_output
}
)
legacy_init_op = tf.group(tf.tables_initializer(), name="legacy_init_op")
builder.add_meta_graph_and_variables(
sess=sess,
tags=[tf.saved_model.tag_constants.SERVING],
signature_def_map={
"predict_signature_map": predict_signature_def_map
},
legacy_init_op=legacy_init_op,
assets_collection=None
)
builder.save()
我的导出模型的目录如下所示:
|----1
|----saved_model.pb
|----variables
|----variables.data-00000-of-00002
|----variables.data-00001-of-00002
|----varaibles.index
答案 1 :(得分:0)
为什么签名:图表不会指示输入是什么以及输出是什么,并且这些信息是服务所需要的(当您在Python程序中加载图形并对其执行某些操作时,它是隐式提供的;用于提供它需要明确)。
我会看一下simple_save更好的API来创建已保存的模型,虽然我认为它还没有成为TensorFlow版本(现在你可以将这几行复制为样板文件)。
答案 2 :(得分:0)
创建模块exporter.py
以导出预先训练的模型,并在nmt.py
模块中添加一些额外的参数,这些参数是导出所需的。
为了测试导出器,我使用nmt/testdata/
文件夹中的测试数据训练了一个简单的模型,并将模型保存在nmt/testdata/models
中。在此之后,运行导出器的测试,它将在nmt/testdata/models
中生成一个名为export的新文件夹,这是我们所期望的,并且可以通过服务提供。
您可以访问提取请求pull request#344 或直接前往我的前叉tensorflow/nmt