Tensorflow 模型格式及不同的Grpah

轉自:Tensorflow 的模型格式

一  * .ckpt   *. pb   variables+.pb

1. CheckPoint(*.ckpt)

在訓練 TensorFlow 模型時,每迭代若干輪需要保存一次權值到磁盤,稱爲“checkpoint”,如下圖所示:

這種格式文件是由 tf.train.Saver() 對象調用 saver.save() 生成的,只包含若干 Variables 對象序列化後的數據,不包含圖結構,所以只給 checkpoint 模型不提供代碼是無法重新構建計算圖的。

載入 checkpoint 時,調用 saver.restore(session, checkpoint_path)。

2. GraphDef(*.pb)

這種格式文件包含 protobuf 對象序列化後的數據,包含了計算圖,可以從中得到所有運算符(operators)的細節,也包含張量(tensors)和 Variables 定義,但不包含 Variable 的值,因此只能從中恢復計算圖,但一些訓練的權值仍需要從 checkpoint 中恢復。下面代碼實現了利用 *.pb 文件構建計算圖:

TensorFlow 一些例程中用到 *.pb 文件作爲預訓練模型,這和上面 GraphDef 格式稍有不同,屬於凍結(Frozen)後的 GraphDef 文件,簡稱 FrozenGraphDef 格式。這種文件格式不包含 Variables 節點。將 GraphDef 中所有 Variable 節點轉換爲常量(其值從 checkpoint 獲取),就變爲 FrozenGraphDef 格式。代碼可以參考 tensorflow/python/tools/freeze_graph.py

*.pb 爲二進制文件,實際上 protobuf 也支持文本格式(*.pbtxt),但包含權值時文本格式會佔用大量磁盤空間,一般不用。

3. SavedModel

在使用 TensorFlow Serving 時,會用到這種格式的模型。該格式爲 GraphDef 和 CheckPoint 的結合體,另外還有標記模型輸入和輸出參數的 SignatureDef。從 SavedModel 中可以提取 GraphDef 和 CheckPoint 對象。

SavedModel 目錄結構如下:

其中 saved_model.pb(或 saved_model.pbtxt)包含使用 MetaGraphDef protobuf 對象定義的計算圖;assets 包含附加文件;variables 目錄包含 tf.train.Saver() 對象調用 save() API 生成的文件。

以下代碼實現了保存 SavedModel:



二 . Graph   GraphDef   MetaGraph

參考:Tensorflow框架實現中的“三”種圖

1. Graph :被定義爲“一些 Operation 和 Tensor 的集合“

2.GraphDef:Graph中序列化出來的圖就叫做 GraphDef,將”變量“存到節點中。GraphDef 雖然不能保存 Variable,但可以保存         Constant 。tensorflow 版本也提供了一套叫做 freeze_graph 的工具來自動的將圖中的 Variable 替換成 constant 存儲                    在 GraphDef 裏面。

3.MetaGraph:一個Meta Graph 由一個計算圖和其相關的元數據構成,meta Graph在具體實現上就是一個MetaGraphDef (同          樣是由 Protocol Buffer來定義的)。

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