深度学习框架使用的模型格式

TensorFlow模型保存时的几种主要格式

CKPT格式

一般情况下,我么你是用TensorFlow时保存模型都使用ckpt格式的模型文件

但是这种方式有几个缺点:

  1. 这种模型文件是依赖TensorFlow的,只能在其框架下使用。
  2. 在恢复模型之前还需要再定义一遍网络结构,然后才能把变量的值恢复到网络中。

PB格式

谷歌推荐的保存模型的方式是保存模型为PB文件。

PB格式的优点:

  1. 它具有语言独立性,可独立运行,封闭的序列化格式,任何语言都可以解析它,它允许其他语言和深度学习框架读取、继续训练和迁移TensorFlow的模型。
  2. 它的主要使用场景是实现创建模型与使用模型的解耦,使得在推理过程中不用像ckpt格式那样重新定义一遍网络。
  3. 保存BP文件的时候,模型的变量都会变成固定的,导致模型的大小会大大较少,适合在手机端运行。

PB格式具体细节

PB文件是表示MetaGraph的protocol buffer格式的文件,MetaGraph包括计算图、数据流、以及相关的变量和输入输出signature以及asserts(指创建计算图时额外的文件)。

主要是用tf.SavedModelBuilder类来完成这个工作,并且可以把多个计算图保存到一个PB文件中,如果有多个MetaGraph,那么只会保留第一个MetaGraph的版本号,并且必须为每个MetaGraph指定特殊的名称tag用以区分,通常这个名称tag以该计算图的功能和使用到的设备命名:比如serving or trainint,CPU or GPU。

接下来我们看看经典的保存PB文件的代码:

加载PB模型文件的代码:

TensorFlow 一些例程中用到 *.pb 文件作为预训练模型,这和上面的格式稍有不同,属于冻结(Frozen)后的 GraphDef 文件,简称 FrozenGraphDef 格式。这种文件格式不包含 Variables 节点。将 GraphDef 中所有 Variable 节点转换为常量(其值从 checkpoint 获取),就变为 FrozenGraphDef 格式。代码可以参考 tensorflow/python/tools/freeze_graph.py。

.pb 为二进制文件,实际上 protobuf 也支持文本格式(.pbtxt),但包含权值时文本格式会占用大量磁盘空间,一般不用。

 

pytorch模型保存格式

对着手写数字识别实例讲讲pytorch模型保存的格式。首先讲讲保存模型或权重参数的后缀,pytorch保存数据的格式为.t7文件或者.pth文件,或者.pkl格式,t7文件是沿用torch7中读取模型权重的方式。而pth文件是python中存储文件的常用格式。而在keras中则是使用.h5文件

我们经常会看到后缀名为.pt, .pth, .pkl的pytorch模型文件,这几种模型文件在格式上有什么区别吗?其实它们并不是在格式上有区别,只是后缀不同而已(仅此而已),在用torch.save()函数保存模型文件时,各人有不同的喜好,有些人喜欢用.pt后缀,有些人喜欢用.pth或.pkl.用相同的torch.save()语句保存出来的模型文件没有什么不同。

在pytorch官方的文档/代码里,有用.pt的,也有用.pth的。一般惯例是使用.pth,但是官方文档里貌似.pt更多,而且官方也不是很在意固定用一种。

 

Mxnet模型保存格式

.params和.json两个文件

会有两个文件paramsjson文件,其中params文件中包含的是模型的网络参数,json文件包含的是网络的结构。

 

caffe模型保存格式

caffemodel包含两个文件.prototxt,.caffemodel包含两个文件

一个是prototxt网络描述文件,存储了网络图,一个是caffemodel权重文件,存储了模型权重的相关参数和具体信息

三种文件类别:solver,model和weights

solver文件

是一堆超参数,比如迭代次数,是否用GPU,多少次迭代暂存一次训练所得参数,动量项,权重衰减(即正则化参数),基本的learning rate,多少次迭代打印一次loss,以及网络结构描述文件(即model文件)存储位置,等等

比如: lenet_solver.prototxt

model文件

也有一些参数,指定了深度卷积网的结构,包括每一层各个参数,以及训练输入的数据存放位置等。

比如: lenet_train_test.prototxt

weights文件

权值存储文件,训练所得到的权值参数都存在这个文件中

比如:lenet_iter_10000.caffemodel

 

https://blog.csdn.net/rocky6688/article/details/107790665

https://blog.csdn.net/weixin_43216883/article/details/89792312

https://www.cnblogs.com/zjutzz/p/5955508.html

你可能感兴趣的:(人工智能,tensorflow,pytorch,caffe,深度学习,mxnet)