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

Cloud ml无法使用tables\u初始值设定项部署模型

  •  1
  • Stewart_R  · 技术社区  · 6 年前

    我希望部署一个训练有素的模型到ml引擎。我可以在本地运行我的代码,比如:

    with tf.Session() as sess:
      sess.run([tf.global_variables_initializer(), tf.tables_initializer()])
      example_result = sess.run(
                        my_model, 
                        feed_dict=###snip###
                      )
    

    export_builder.add_meta_graph_and_variables(
            sess, 
            [tf.saved_model.tag_constants.SERVING], 
            signature_def_map={
                tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: sig
            })
    

    我可以把它部署到ml引擎上。然而,当我调用模型时,我得到一个错误,因为表没有初始化。


    我尝试过的事情:

    1. 添加 tf.tables_initializer() 在任何操作之前 my_model

    这对 第一

    1. 通过 tf.tables_初始值设定项() legacy_init_op 参数 add_meta_graph_and_variables

    这根本无法部署到ml引擎,并显示错误消息

    模型:需要类似字节的对象,而不是“str”(错误代码:0)

    1. 通过 tf.tables_初始值设定项() tf.saved_model.main_op.main_op() main_op 参数 添加“meta”graph“u”和“u”变量 方法。

    创建版本失败。检测到错误的模型:“未能加载 模型:需要类似字节的对象,而不是“str”(错误代码:0)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Stewart_R    6 年前

    我们必须将表初始值设定项op作为 main_op assets_collection 在我们的召唤中 add_meta_graph_and_variables :

    init_op = tf.tables_initializer()
    
    with tf.Session() as sess:
      sess.run([tf.global_variables_initializer(), init_op])
      example_result = sess.run(
                    my_model, 
                    feed_dict=###snip###
                  )
    

    然后

    
        export_builder.add_meta_graph_and_variables(
            sess, 
            [tf.saved_model.tag_constants.SERVING],
            main_op = init_op,
            assets_collection=tf.get_collection(tf.GraphKeys.ASSET_FILEPATHS),
            signature_def_map={
                tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: sig
            }
        )
    
    

    作为一种(可以说是更简单的)替代方案,我们可以使用 simple_save