Найти выходную форму модели тензорного потока .pb в скрипте Python - PullRequest
0 голосов
/ 18 июня 2019

Я хотел бы восстановить выходную форму любой заданной замороженной модели тензорного потока .pb в скрипте Python.

Используя Google API для просмотра структуры узлов графа, я могу восстановить входную форму путем поиска узлов n с помощью n.op == 'Placeholder'.

Я также нахожу узлы, которые не перенаправляют на какие-либо другие узлы, поскольку они должны быть выходными, но я не знаю, что мне делать, чтобы восстановить их форму.

И что я не совсем понимаю, так это то, что в случае модели обнаружения лиц есть два узла, которые не перенаправляют на другие узлы (это означает два вывода? Как это возможно?).

(Дополнительный вопрос) Для таких моделей, как модели обнаружения лиц, которые могут обнаруживать несколько лиц, как выглядит выходная форма?

import tensorflow as tf
from tensorflow.python.platform import gfile
# Load the nodes list
with tf.Session() as sess:
    with gfile.GFile('./face_detect.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        tf.import_graph_def(graph_def, name='')
        graph_nodes = [n for n in graph_def.node]
# show (candidates?) output_node(s)
nodeMap = {n.name: n for n in graph_nodes}
node_links_to = {n.name: 0 for n in graph_nodes}
for n in graph_nodes:
    for i in n.inputs:
        node_links_to[i] += 1
output_nodes = [nodeMap[n] for n, c in node_links_to.items() if c == 0]
print(output_nodes)

Это дает мне такой вывод:

[name: "strided_slice"
 op: "StridedSlice"
 input: "detection_predictions/concat"
 input: "strided_slice/stack"
 input: "strided_slice/stack_1"
 input: "strided_slice/stack_2"
 attr {
   key: "Index"
   value {
     type: DT_INT32
   }
 }
 attr {
   key: "T"
   value {
     type: DT_FLOAT
   }
 }
 attr {
   key: "begin_mask"
   value {
     i: 0
   }
 }
 attr {
   key: "ellipsis_mask"
   value {
     i: 0
   }
 }
 attr {
   key: "end_mask"
   value {
     i: 0
   }
 }
 attr {
   key: "new_axis_mask"
   value {
     i: 0
   }
 }
 attr {
   key: "shrink_axis_mask"
   value {
     i: 1
   }
 }]

Я хотел бы вывести что-то вроде:

output shape: (3, 192, 192)

(этот пример формы вывода не соответствует приведенному примеру) Извините, у меня нет возможности загрузить файл примера модели, который я использовал, откуда я.

Редактировать: я также установил sumrize_graph tenorflow, он нашел 2 возможных выхода для моей модели примера и не показывает форму вывода.

Спасибо

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