Cloud-ml не может развернуть модель с tables_initializer - PullRequest
0 голосов
/ 15 октября 2018

Я хочу развернуть обученную модель на ml-engine.Я могу локально запустить свой код с чем-то вроде:

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-engine.Однако, когда я вызываю модель, я получаю сообщение об ошибке, поскольку таблицы не инициализируются.

Как развернуть модель, в которой таблицы инициализируются автоматически / по умолчанию?


Вещи, которые я пробовал:

  1. Добавление tf.tables_initializer() в качестве зависимости перед любым из операций в my_model

Это работает * * * первый раз, когда я вызываю развернутую модель, но при каждом последующем вызове происходит сбой с сообщением об ошибке, сообщающим, что таблица уже инициализирована

Передача tf.tables_initializer() в качестве параметра legacy_init_op методу add_meta_graph_and_variables.

это вообще не удается развернуть в ml-engine с сообщением об ошибке

Ошибка создания версии.Обнаружена плохая модель с ошибкой: «Не удалось загрузить модель: требуется объект, похожий на байты, а не« str »(Код ошибки: 0)»

Передача tf.tables_initializer() или tf.saved_model.main_op.main_op() в качестве параметра main_op в метод add_meta_graph_and_variables.

В каждом случае по-прежнему не удается развернуть модель с тем же сообщением об ошибкекак в (2.):

Ошибка создания версии.Обнаружена плохая модель с ошибкой: «Не удалось загрузить модель: требуется объект, похожий на байты, а не« str »(Код ошибки: 0)»

1 Ответ

0 голосов
/ 29 октября 2018

Мы должны передать опцию инициализатора таблиц как 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],
        <b>main_op = init_op,</b>
        <b>assets_collection=tf.get_collection(tf.GraphKeys.ASSET_FILEPATHS),</b>
        signature_def_map={
            tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: sig
        }
    )


В качестве (возможно, более простой) альтернативы мы могли бы использовать метод simple_save для сохранения нашей модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...