2018-04-04

TensorFlow 到底有幾種模型格式?

  1. CheckPoint(*.ckpt)
    在訓(xùn)練 TensorFlow 模型時(shí),每迭代若干輪需要保存一次權(quán)值到磁盤,稱為“checkpoint”,如下圖所示:


    image

這種格式文件是由 tf.train.Saver() 對(duì)象調(diào)用 saver.save() 生成的,只包含若干 Variables 對(duì)象序列化后的數(shù)據(jù),不包含圖結(jié)構(gòu),所以只給 checkpoint 模型不提供代碼是無(wú)法重新構(gòu)建計(jì)算圖的。
載入 checkpoint 時(shí),調(diào)用 saver.restore(session, checkpoint_path)。

  1. GraphDef(*.pb)
    這種格式文件包含 protobuf 對(duì)象序列化后的數(shù)據(jù),包含了計(jì)算圖,可以從中得到所有運(yùn)算(operators)的細(xì)節(jié),也包含張量(tensors)和 Variables 定義,但不包含 Variable 的值,因此只能從中恢復(fù)計(jì)算圖,但一些訓(xùn)練的權(quán)值仍需要從 checkpoint 中恢復(fù)。下面代碼實(shí)現(xiàn)了利用 *.pb 文件構(gòu)建計(jì)算圖:


    image

    TensorFlow 一些例程中用到 *.pb 文件作為預(yù)訓(xùn)練模型,這和上面 GraphDef 格式稍有不同,屬于凍結(jié)(Frozen)后的 GraphDef 文件,簡(jiǎn)稱 FrozenGraphDef 格式。這種文件格式不包含 Variables 節(jié)點(diǎn)。將 GraphDef 中所有 Variable 節(jié)點(diǎn)轉(zhuǎn)換為常量(其值從 checkpoint 獲?。妥?yōu)?FrozenGraphDef 格式。代碼可以參考 tensorflow/python/tools/freeze_graph.py

.pb 為二進(jìn)制文件,實(shí)際上 protobuf 也支持文本格式(.pbtxt),但包含權(quán)值時(shí)文本格式會(huì)占用大量磁盤空間,一般不用。
3. SavedModel

在使用 TensorFlow Serving 時(shí),會(huì)用到這種格式的模型。該格式為 GraphDef 和 CheckPoint 的結(jié)合體,另外還有標(biāo)記模型輸入和輸出參數(shù)的 SignatureDef。從 SavedModel 中可以提取 GraphDef 和 CheckPoint 對(duì)象。

SavedModel 目錄結(jié)構(gòu)如下:

image

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

以下代碼實(shí)現(xiàn)了保存 SavedModel:

image

載入 SavedModel:

image

更多細(xì)節(jié)可以參考 tensorflow/python/saved_model/README.md。
https://mp.weixin.qq.com/s/GDfOBG-DF5HnlOZXSyf0JQ

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容