Оптимизация логического вывода для нескольких входов / выходов - PullRequest
0 голосов
/ 14 января 2019

У меня есть собственный оценщик. Я пытаюсь оптимизировать этот оценщик для вывода (заморозить + оптимизировать).

Вот что я пытался добавить в model_fn():

input_tensors = [input_1, input_2, input_3]
output_tensors = [output_1, output_2, output_3, output_4]

tmp_g = tf.get_default_graph().as_graph_def()

from tensorflow.python.tools.optimize_for_inference_lib import optimize_for_inference

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    tmp_g = tf.graph_util.convert_variables_to_constants(sess, tmp_g, [n.name[:-2] for n in output_tensors])
    dtypes = [n.dtype for n in input_tensors]

    tmp_g = optimize_for_inference(
                tmp_g,
                [n.name[:-2] for n in input_tensors],
                [n.name[:-2] for n in output_tensors],
                [dtype.as_datatype_enum for dtype in dtypes],
                False)


    output_1, output_2, output_3, output_4 = tf.import_graph_def(tmp_g, input_map={n.name[:-2] + ':0': n for n in input_tensors}, return_elements=['output_1', 'output_2', 'output_3', 'output_4 '])
    from tensorflow.python.estimator.model_fn import EstimatorSpec

    return EstimatorSpec(mode=mode, predictions={
                "output_1": output_1[0],
                "output_2": output_2[0],
                "output_3": output_3[0],
                "output_4": output_4[0]
        })

Однако, когда вызывается import_graph_def, я получаю следующую ошибку:

ValueError: Узел 'bert / embeddings / ExpandDims': подключение к неверному вывод 1 исходного узла IteratorGetNext, который имеет 1 вывод

(Мои входы подключены к модели BERT).


Есть идеи откуда она взялась? И как это исправить?

1 Ответ

0 голосов
/ 14 января 2019

Имя моих тензоров было неверным, когда я звонил tf.import_graph_def.

Я использовал этот вопрос для помощи.

Здесь - минимальный пример на Colab.

Я исправил проблему, выполнив:

output_1, output_2, output_3, output_4 = tf.import_graph_def(tmp_g, input_map={n.name: n for n in input_tensors}, return_elements=[n.name for n in output_tensors])
...