Сравните два графика Tensorflow - PullRequest
0 голосов
/ 06 июня 2018

Какой самый простой способ сравнить две развернутые модели прогнозирования GCMLE и определить различия в их графиках?Я визуально осмотрел обе тензорные доски, и они выглядят одинаково (как и должно быть).Однако у меня есть код для визуализации их активаций (в основном это просто загрузка весов из графиков и выполнение всех шагов вперед вручную), и где-то на одном из графиков мои рукописные вычисления прямого прохода расходятся с вычислениями прямого прохода tenorflow.Код, использованный для обучения моделей, должен был быть идентичным, но один и тот же прямой проход представляется точным только для одной из моделей.Есть ли способ сравнить структуру?

Помимо проверки тензорной доски, я отдельно попробовал следующее:

model1_tensors = [n.name for n in tf.get_default_graph().as_graph_def().node]
model2_tensors = [n.name for n in tf.get_default_graph().as_graph_def().node]

В конечном счете, также не было видимой разницы в именах тензоров и т. Д. (Предполагая, что они представляют собой один и тот же граф) на основепри сравнении разности set (): [n.name for n in tf.get_default_graph().as_graph_def().node] для каждой из сохраненных моделей.

Учитывая, что один и тот же код прямого прохода дает точные результаты для одной модели и не дает точных результатов для другой модели, я вполне уверенчто графики разные, но я ломаю голову, указывая на то, ЧТО эта разница.

Чтобы сделать еще один шаг вперед, я на самом деле уверен, что знаю точный слой, где расчеты расходятся (это со слоем нормы партии), поэтому, если бы был способ вывести все тензоры, которые входят вВ этом случае я смогу определить, что еще делается.

1 Ответ

0 голосов
/ 06 июня 2018

Лучший подход, который я нашел, основан на том, чтобы получить объекты GraphDef и сравнить их с помощью тестов тензорного потока.

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.SERVING], _VERSION_2)  
    graph_1 = tf.get_default_graph().as_graph_def()

with tf.Session(graph=tf.Graph()) as sess:
    tf.saved_model.loader.load(sess, [tf.saved_model.tag_constants.SERVING], _VERSION_2)  
    graph_2 = tf.get_default_graph().as_graph_def()

Затем я могу использовать их для сравнения двух графиков:

from tensorflow.python import pywrap_tensorflow
diff = pywrap_tensorflow.EqualGraphDefWrapper(graph_65.SerializeToString(), # actual
                                          graph_60.SerializeToString()) # expected
print(diff)

Похоже, что это показывает одну разницу, но не все различия.

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