Оптимизация вывода для нескольких входов/выходов Пользовательский оценщик

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

Вот что я пытался добавить в 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: Node 'bert/embeddings/ExpandDims': подключение к недопустимому выходу 1 исходного узла IteratorGetNext, который имеет 1 выход

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


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


person Astariul    schedule 14.01.2019    source источник


Ответы (1)


Имя моих тензоров было неправильным, когда я вызываю 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])
person Astariul    schedule 14.01.2019