无法在张量流会话中保存tf.contrib.learn宽和深模型并在TensorFlow服务上提供服务

时间:2016-11-07 16:48:32

标签: tensorflow tensorflow-serving

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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()导出模型。

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

    1. 创建并将脚本放在/ serve /文件夹中的某个位置,例如/服务/ tensorflow_serving /示例/

    2. 通过添加py_binary

    3. 来创建或修改相应的BUILD文件
    4. 构建并运行模型服务器,例如tensorflow_model_server

    5. 创建,构建并运行一个客户端,该客户端将tf.Example发送到我们的tensorflow_model_server进行推断。

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

      希望它有所帮助。

答案 2 :(得分:0)

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