如何查看两个协议缓冲区文件(.pb)是否相同?

时间:2019-08-09 14:51:01

标签: python tensorflow keras protocol-buffers

我有一堆用//Using tags as a test <ContextMenu> <MenuItem Name="testing" Header="Move to Position 10" Command="{Binding TestCommand}" Tag="7"> <MenuItem.CommandParameter> <MultiBinding Converter="{StaticResource AddConverter}"> <Binding ElementName="testing" Path="Tag"/> <Binding ElementName="testing" Path="Tag"/> </MultiBinding> </MenuItem.CommandParameter> </MenuItem> </ContextMenu> Tensorflow创建的模型的协议缓冲文件,我想看看哪些是相同的。我的第一个想法是使用Keras,但是我发现运行相同的脚本将图形冻结为hashlib.md5文件会导致.pb文件具有不同的哈希值。

这是我创建.pb文件的方式:

.pb

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

protobuf不能正式保证在语义上相同的输入中具有完全相同的输出;特别是:

  • 字段的顺序可以更改:
    • 尽管单个块中写入的数据按字段/标签顺序是很常见的,但并不需要 (并且要求 接受读者-of-order字段)
    • 通过多次写入(串联)构造的数据不能保证字段顺序
  • 标记为“已打包”的
  • 字段可以打包,也可以不打包;由写作库决定使用哪个
  • “ varint”编码本身是模棱两可的;其他不必要的字节是意外的,但从技术上来讲不是非法的-例如,您可以在实际值之后编码多个7位零位的块,例如

如果要检查语义相等性,则必须解析数据并后处理