【问题标题】:Compare Two Tensorflow Graphs比较两个张量流图
【发布时间】:2018-06-06 21:51:32
【问题描述】:

比较两个 GCMLE 部署的预测模型并确定其图表中的任何差异的最简单方法是什么?我已经目视检查了两个张量板,它们看起来相同(应该是)。但是,我有代码来可视化它们的激活(基本上只是从图中加载权重并手动执行所有前向步骤),并且在其中一张图上的某个地方,我手写的前向传递计算与 tensorflow 的前向传递计算不同。用于训练模型的代码应该是相同的,但相同的前向传递似乎只对其中一个模型是准确的。有什么方法可以比较结构吗?

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

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],张量名称等也没有明显差异。

鉴于相同的前向传递代码为一个模型产生了准确的结果,而对另一个模型没有产生准确的结果,我非常相信这些图表是不同的,但我在指出差异是什么时摸不着头脑。

更进一步,我实际上确信我知道计算分歧的确切层(它与批处理规范层),所以如果有一种方法可以输出进入特定层的所有张量,那么我也许能够确定还有其他事情正在做。

【问题讨论】:

    标签: tensorflow google-cloud-ml


    【解决方案1】:

    我发现的最佳方法是获取 GraphDef 对象并使用 tensorflow 测试进行比较。

    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)
    

    这似乎显示了一个差异,但它并没有显示所有差异。

    【讨论】:

    • 我只是想在您的回答中添加更多信息。另一种方法是比较他们保存的模型的元数据。使用这种方法,通过读取文件,您将能够比较结构(例如 .pbtxt)以查找差异,this post 包含有关此的详细信息,请参阅“附件:有关 TF 数据生态系统的更多信息”部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多