一般情况下,我么你是用TensorFlow时保存模型都使用ckpt格式的模型文件
但是这种方式有几个缺点:
谷歌推荐的保存模型的方式是保存模型为PB文件。
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保存数据的格式为.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更多,而且官方也不是很在意固定用一种。
.params和.json两个文件
会有两个文件params
和json
文件,其中params文件中包含的是模型的网络参数,json文件包含的是网络的结构。
caffemodel包含两个文件.prototxt,.caffemodel包含两个文件
一个是prototxt网络描述文件,存储了网络图,一个是caffemodel权重文件,存储了模型权重的相关参数和具体信息
是一堆超参数,比如迭代次数,是否用GPU,多少次迭代暂存一次训练所得参数,动量项,权重衰减(即正则化参数),基本的learning rate,多少次迭代打印一次loss,以及网络结构描述文件(即model文件)存储位置,等等
比如: lenet_solver.prototxt
也有一些参数,指定了深度卷积网的结构,包括每一层各个参数,以及训练输入的数据存放位置等。
比如: lenet_train_test.prototxt
权值存储文件,训练所得到的权值参数都存在这个文件中
比如: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