代码之家  ›  专栏  ›  技术社区  ›  mylogon

将培训检查点导出到生产环境-需要白痴指南[已关闭]

  •  -2
  • mylogon  · 技术社区  · 6 年前

    我有一匹好母马。
    我在尝试将培训信息发送到可以部署到生产服务器的状态时遇到了真正的困难。
    我跟随 this tutorial (这对我来说是非常颗粒状和完美的)。我将检查点导出到一个冻结的推理图中,并使用测试脚本来查看它是否有效 really quite well . 我在某个地方读到,这些冻结的推理图不适合生产,需要将其导出到“savedModel”。 我花了好几个小时寻找解决方案/指南,但也找到了很多不同的答案-有些已经成功导出到“1/saved-model.pb 1/variables”模型文件夹结构。
    兴奋之余,我给自己买了一个数字海洋账户,制作了一个预装了Docker的UbuntuVM,并设置了以下容器:
    - Bitnami/tensorflow-serving
    - Bitnami/tensorflow-inception

    然后我用一个docker compose启动它们,这个compose启动一些共享目录等。通过示例模型(inception-v3),当传入jpg时,我可以让这个系统工作得很好。
    当我试图为我的导出模型服务时,问题就出现了,我得到了很多错误,我真的不理解,也无法找到在线解决方案。当试图从Docker cli运行它时,我得到了一些(我怀疑) network errors . 当我尝试使用包设置nodejs服务器时 tensorflow-serving-node-client (这可能是我将用来转发firebase请求的一些变体)回来抱怨 'tensors' and 'signatures' .

    我通常很擅长解决问题,但不幸的是,由于缺乏睡眠、时间和特别好的阅读能力,我在这方面真的很欠缺。我知道我的基本知识在整个问题上都有缺陷,这也是我解决问题的失败之处。

    我非常怀疑我没有正确地出口检查站,因此难以提供服务,但从我搜遍的所有youtube视频和博客文章(一个多星期)中,只能解释到设置培训的目的,或者从你导出模型并想为其服务的目的。如果我理解正确的话,在解释中间那一点上似乎有某种市场。我确实跟随 this official guide ,但当全部导出时,所有文件都是空的~4KB文件,这显然是不对的。

    有没有人能给我指一个正确的方向,告诉我在哪里可以找到一个简明、可靠的指南?我能停止把头撞在墙上的那一点会很神奇。我甚至问了一些工作中的“数据科学家”,他们只是告诉我,他们从来没有听说过,只是使用r和excel……

    发送帮助。

    提前谢谢你,
    卢克

    另外,关于长度的问题,我很抱歉。我相信它会被某个模子宰了-我是个有点冗长的解释者。

    1 回复  |  直到 6 年前
        1
  •  1
  •   T. Kelher    6 年前

    我没有必要认为冰冻的图表不利于服务,至少我不明白为什么会这样,但那可能只是我自己。我会尽力帮忙,但不能保证什么。

    1)冻结图基本上是一个转换的savedModel,所有的权重都设置为常量而不是变量,因此是不可处理的。这意味着你应该在某个地方有一个savedModel。

    2)如果没有,让我们先将冻结的图形加载到会话中,然后再对其进行转换。

    def load_frozen_model(path_to_model):
        path_to_model = check_path(path_to_model, mode="frozen")
        with tf.gfile.GFile(path_to_model, "rb") as f:
            graph_def = tf.GraphDef()
            graph_def.ParseFromString(f.read())
    
        with tf.Session() as sess:
            tf.import_graph_def(graph_def, name="")
            return sess
    
    builder = tf.saved_model.builder.SavedModelBuilder(saved_model_path="non existing 
                                                                         folder")
    session = load_frozen_model("path/to/something.pb")
    
    # create tensorboard logs, run with $ tensorboard --log_dir path_to_log_folder
    # check for the names of the input and output you need.
    tf.summary.FileWriter(path_to_existing_folder, session.graph)
    
    input_tensor = session.graph.get_tensor_by_name("name_you_need:0")
    output_tensor = session.graph.get_tensor_by_name("name_you_need:0")
    input_tensor_info = tf.saved_model.utils.build_tensor_info(input_tensor )
    output_tensor_info = tf.saved_model.utils.build_tensor_info(output_tensor )
    signature = tf.saved_model.signature_def_utils.build_signature_def(
                 inputs={'input_image': input_tensor_info},
                 outputs={'final_result': output_tensor_info},
                 method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
    
    # save as SavedModel
    builder.add_meta_graph_and_variables(session,
                                             [tf.saved_model.tag_constants.SERVING],
                                             signature_def_map={'serving_default': 
                                                                signature})
    builder.save()
    

    3)可以通过执行以下操作加载保存的模型:

    def load_saved_model(path_to_model):
        with tf.Session() as sess:
            tf.saved_model.loader.load(sess, [tag_constants.SERVING], path_to_model)
            return sess
    

    4)我不太清楚这个错误“details:”在signature:images中找不到输入张量别名。期望在集合{inputs}.'}“中的输入应该是抱怨的,但可能是您没有正确定义签名,或者您没有正确指定输入。

    如果我没有提供你想要的答案,那我很抱歉,但我想这可能是你的问题。不过,我对那些http错误一无所知,也不知道如何为您的模型提供服务器服务,我通常倾向于使用其他东西。 如果你遇到错误,我们可以一起调试,我只是写了这段代码,没有在你的模型上测试。