比较两个Tensorflow图

时间:2018-06-05 23:54:13

标签: tensorflow google-cloud-ml

比较两个GCMLE部署的预测模型并确定其图表中的任何差异的最简单方法是什么?我在视觉上检查了两个张量板,它们看起来完全相同(应该是这样)。但是,我有代码来显示它们的激活(基本上只是从图形中加载权重并手动执行所有前进步骤)以及在其中一个图形上的某个地方我的手写正向通道计算偏离张量流向前通过计算。用于训练模型的代码应该是相同的,但是对于其中一个模型,相同的前向通道似乎是准确的。有没有办法比较结构?

除了检查张量板之外,我还单独尝试了以下内容:

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]

最终,基于比较每个saved_model的[n.name for n in tf.get_default_graph().as_graph_def().node]的set()差异,张量名称等也没有明显差异(表明它们是相同的图形)。

鉴于相同的正向传递代码可以为一个模型产生准确的结果,并且不能为另一个模型产生准确的结果,我相信这些图表是不同的,但我正在指着这个区别是什么。

为了更进一步,我确信我知道计算偏离的确切层(它与批量范数层有关),所以如果有办法输出进入特定层的所有张量,那么我或许可以确定还有其他事情要做。

1 个答案:

答案 0 :(得分:1)

我发现的最佳方法是获取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)

这确实显示出单一的差异,但它并未显示所有差异。