1.checkpoint文件
1.1保存方式
tf.train.Saver()
1.2可以得到四個文件
checkpoint 檢查點文件
model.ckpt.data-xxx 保存的是參數的值
model.ckpt.index 保存的是各個參數
model.ckpt.meta 保存的是圖的結構
1.3通過saver.restore()恢復整個神經網絡
但是這種方式有幾個缺點,首先這種模型文件是依賴 TensorFlow 的,只能在其框架下使用;其次,在恢復模型之前還需要再定義一遍網絡結構,然後才能把變量的值恢復到網絡中。
ps: 使用chpt也可以直接加載網絡結構,不需要重新定義網絡:
saver = tf.train.import_meta_graph('./ckpt/model.ckpt.meta')
1.4保存和重現
使用tf.train.Saver()進行保存
使用saver.restore()進行重現
2.pb文件
2.1優勢
(1)谷歌推薦的保存模型的方式是保存模型爲 PB 文件,它具有語言獨立性,可獨立運行,封閉的序列化格式,任何語言都可以解析它,它允許其他語言和深度學習框架讀取、繼續訓練和遷移 TensorFlow 的模型;
(2)保存爲 PB 文件時候,模型的變量都會變成固定的,導致模型的大小會大大減小,適合在手機端運行。
2.2使用場景
實現創建模型與使用模型的解耦, 使得前向推導 inference的代碼統一.
2.3格式
PB 文件是表示 MetaGraph 的 protocol buffer格式的文件
2.4需要注意
Graphdef中不保存任何 Variable 的信息,所以如果從graph_def來構建圖並恢復訓練的話,是不能成功的。
Meta Graph在具體實現上就是一個 MetaGraphDef (同樣是由 Protocol Buffer來定義的). 其包含了四種主要的信息,根據Tensorflow官網,這四種 Protobuf 分別是:
[1] - MetaInfoDef,存一些元信息(比如版本和其他用戶信息)
[2] - GraphDef, MetaGraph 的核心內容之一
[3] - SaverDef,圖的Saver信息(比如最多同時保存的check-point數量,需保存的Tensor名字等,但並不保存Tensor中的實際內容)
[4] - CollectionDef,任何需要特殊注意的 Python 對象,需要特殊的標註以方便import_meta_graph 後取回(如 train_op, prediction 等等)
【參考】