中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

將Tensorflow圖序列化以及反序列化的巧妙方法

2018-07-20    來源:raincent

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

原標題 Smart way to serialize/deserialize classes to/from Tensorflow graph ,作者為 Francesco Zuppichini 。

將類中的字段和 graph 中的 tensorflow 變量進行自動綁定,并且在不需要手動將變量從 graph 中取出的情況下進行重存,聽起來有沒有很炫酷?

可以點擊這里找到本文所涉及的代碼。Jupyter-notebook 的版本點擊這里。

假設你有一個 Model 類。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

一般來說,首先需要構(gòu)建模型,然后對模型進行訓練。之后無需再次從頭重新構(gòu)建訓練模型,而是從已經(jīng)保存的 graph 中獲取舊變量來進行使用。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

假設我們已經(jīng)訓練好了模型,現(xiàn)在我們想要把它保存下來。通常的模式是:

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

接下來你會通過加載已保存的 graph 來執(zhí)行 inference,也就是把變量取出的操作。在下面的例子中,我們將變量命名為 variable 。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

現(xiàn)在我們可以從 graph 中取出變量 variable 。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

假如我們想要再次使用 model 類要怎么辦?如果我們嘗試去調(diào)用 model.variable,得到的結(jié)果會是 None。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

一個解決方案是重新構(gòu)建整個模型,然后重新保存一個 graph 。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

可以想見,這個過程肯定非常耗費時間。我們可以通過直接將 model.variable 綁定到相應的 graph 節(jié)點上來實現(xiàn),如下:

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法
將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

假設我們有一個非常大的模型,且內(nèi)含嵌套變量。

為了能夠?qū)⒆兞恐羔樥_的重存進模型,你需要

• 為每個變量命名
• 從 graph 中取回變量

如果可以通過在 Model 類中將變量設置為字段的方式來實現(xiàn)自動檢索,這聽起來就很酷,有沒有?

TFGraphConvertible

我創(chuàng)建了一個 TFGraphConvertible 類,你可以用這個 TFGraphConvertible 類來自動進行類的序列化和反序列化。

讓我們來重新創(chuàng)建我們的模型。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

它會暴露兩個方法: to_graph 和 from_graph 方法。

序列化?— ?to_graph

你可以通過調(diào)用 to_graph 方法來進行類的序列化,這個方法會創(chuàng)建一個以字段為 key , tensorflow 變量名為值的字典。

你想要序列化哪些字段來構(gòu)建這個字典,那么你需要將這些字段作為 fields 參數(shù)傳入。

在下例中,我們傳入所有這些字段。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

這會創(chuàng)建全量字典,以字段作為關鍵字,以每個字段對應的 tensorflow 變量名作為值。

反序列化?— ?from_graph

你可以通過調(diào)用 from_graph 方法來進行類的反序列化,這個方法通過我們在上文中構(gòu)建的字典內(nèi)容,將類中的字段綁定到對應的 tensorflow 變量上。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

現(xiàn)在你恢復了 model 。

完整的例子

來看一個更有趣的例子!我們接下來要用 MNIST 數(shù)據(jù)集來訓練/恢復一個模型。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

首先,獲取數(shù)據(jù)集。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

現(xiàn)在我們用這個數(shù)據(jù)集來進行訓練

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

完美!接下來我們將這個序列化后的模型存到內(nèi)存中。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

接著我們重置 graph,并且重建模型。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

顯而易見,變量并沒有在 mnist_model 中。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

我們通過調(diào)用 from_graph 方法來重建它們

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

現(xiàn)在 mnist_model 已經(jīng)可以使用了,我們來看一下在測試集上的精確度如何吧。

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

 

將 Tensorflow 圖序列化以及反序列化的巧妙方法

 

結(jié)論

通過這次的教程,我們了解了如何進行類的序列化,以及如何在 tensorflow graph 中將類中的字段反綁到對應的變量上。

并且可以將 serialized_model 保存成 .json 格式,然后從任意位置直接加載它。

通過這種方式,你可以通過面向?qū)ο缶幊痰姆绞絹碇苯觿?chuàng)建模型,且無需重新構(gòu)建就可以索引到所有的變量。

原文鏈接:https://towardsdatascience.com/smart-way-to-srialize-deserialise-class-to-from-tensorflow-graph-1b131db50c7d

標簽: ssd 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡,如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:讀懂AI民族主義:機器學習技術如何影響國際關系?

下一篇:如何選擇數(shù)據(jù)中心合作伙伴?