tensorflow中,checkpoint和pb的區別和聯繫

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 等等)
 

【參考】

1.tensorflow 模型固化文件--checkpoint 和 pb

2.[Tensorflow] 如何從pb文件生成標準的tensorflow checkpoint文件?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章