无法在 tensorflow 会话中保存 tf.contrib.learn wide and deep 模型并在 TensorFlow Serving 上提供它

Unable to save the tf.contrib.learn wide and deep model in a tensorflow session and serve it on TensorFlow Serving

我是 运行 TensorFlow serving 中的 tf.contrib.learn wide and deep model 并导出我正在使用的训练模型

 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 enter image description here

如何保存模型,以便创建在 tensorflow 标准服务器中加载导出模型时需要的可服务对象?感谢任何帮助。

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

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

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

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

TL;DR

导出估算器有四个步骤:

  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. 创建或修改相应的BUILD文件
  4. 构建并 运行 模型服务器,例如tensorflow_model_server.

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

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

希望对您有所帮助。