3

我在 TensorFlow 服务中运行 tf.contrib.learn 广泛而深入的模型,并导出我正在使用这段代码的训练模型

 with tf.Session() as sess:
      init_op = tf.initialize_all_variables()
      saver = tf.train.Saver()
      m.fit(input_fn=lambda: input_fn(df_train), steps=FLAGS.train_steps)
      print('model successfully fit!!')
      results = m.evaluate(input_fn=lambda: input_fn(df_test), steps=1)
      for key in sorted(results):
        print("%s: %s" % (key, results[key]))
      model_exporter = exporter.Exporter(saver)
      model_exporter.init(
      sess.graph.as_graph_def(),
      init_op=init_op,
      named_graph_signatures={
          'inputs': exporter.generic_signature({'input':df_train}),
          'outputs': exporter.generic_signature({'output':df_train[impressionflag]})})
      model_exporter.export(export_path, tf.constant(FLAGS.export_version), sess)
      print ('Done exporting!')

但是在使用命令saver = tf.train.Saver()时错误ValueError: No variable to save is displayed 在此处输入图像描述

如何保存模型,以便在 tensorflow 标准服务器中加载导出的模型时创建一个 servable?任何帮助表示赞赏。

4

3 回答 3

1

图表和会话包含在 Estimator 中,不会暴露或泄露。因此,通过使用 Estimator.export() 我们可以导出模型并创建一个可用于在 model_servers 上运行的 servable。

于 2016-11-17T20:35:42.963 回答
1

Estimator.export()现在已弃用,因此您需要使用Estimator.export_savedmodel().

在这里,我写了一个简单的教程Exporting and Serving a TensorFlow Wide & Deep Model

TL;博士

要导出估算器,有四个步骤:

  1. 将要导出的特征定义为估计器初始化期间使用的所有特征的列表。

  2. 使用create_feature_spec_for_parsing.

  3. 构建一个serving_input_fn适合使用的服务使用input_fn_utils.build_parsing_serving_input_fn

  4. 使用 导出模型export_savedmodel()

要正确运行客户端脚本,您需要执行以下三个步骤:

  1. 创建脚本并将其放置在 /serving/ 文件夹中的某个位置,例如 /serving/tensorflow_serving/example/

  2. 通过添加py_binary.

  3. 构建并运行模型服务器,例如tensorflow_model_server.

  4. 创建、构建和运行一个客户端,该客户端向我们发送一个 tf.Example 以tensorflow_model_server进行推理。

有关更多详细信息,请查看教程本身。

希望能帮助到你。

于 2017-05-09T18:42:55.817 回答
0

那么你的图表有任何变量吗?如果不是,并且所有操作都使用常量,您可以在 Saver构造函数中指定一个标志:
saver = tf.train.Saver(allow_empty=True)

于 2016-11-16T18:07:29.223 回答