.pb 和 .h5 之间的区别

Deb*_*aul 9 keras tensorflow

之间的主要区别是什么。tensorflow的pb格式和keras的.h5格式来存储模型?有什么理由选择其中之一吗?

Szy*_*zke 18

具有不同特征的不同文件格式,都用于tensorflow保存模型(.h5特别是 by keras)。

.pb - protobuf

它是一种存储一些结构化数据(在本例中为神经网络)的方法,该项目是开源的,目前由 Google 进行概述。

例子

person {
  name: "John Doe"
  email: "jdoe@example.com"
}
Run Code Online (Sandbox Code Playgroud)

Simpleclass包含两个字段,您可以使用多种支持的语言之一(例如C++, Go)加载它,解析、修改并以二进制格式发送给其他人。

好处

  • 非常小且解析效率高(与 say 相比.xml),因此通常用于通过网络传输数据
  • 当您想将模型投入生产时,由Tensorflow 的 Serving使用(例如通过网络进行推理)
  • 语言不可知 - 二进制格式可以被多种语言(Java、Python、Objective-C 和 C++ 等)读取
  • 建议使用以来tf2.0,您可以查看官方序列化指南
  • 保存各种元数据(优化器、损失等,如果使用keras's 模型)

缺点

  • SavedModel 在概念上比单个文件更难掌握
  • 创建文件夹的地方weights

来源

您可以在此处阅读有关此格式的信息

.h5 - HDF5 二进制数据格式

最初keras用于保存模型(keras现在正式成为 的一部分tensorflow)。与.pb.

好处

  • 用于保存巨量数据(所以一些神经网络会很适合)
  • 常用文件保存格式
  • 保存在一个文件中的所有内容(权重、损失、使用的优化器keras等)

缺点

  • 不能与 with 一起使用,Tensorflow Serving但您可以简单地将其转换为.pbviakeras.experimental.export_saved_model(model, 'path_to_saved_model')

总而言之

.h5如果您不需要生产模型(或者距离相当远),请使用更简单的 ( )。使用.pb如果你要进行生产,或者只是想在所有单格式规范tensorflow提供的工具。