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

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

2018-07-20    來源:raincent

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

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

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

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

假設(shè)你有一個(gè) Model 類。

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

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

• 為每個(gè)變量命名
• 從 graph 中取回變量

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

TFGraphConvertible

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

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

 

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

 

它會(huì)暴露兩個(gè)方法: to_graph 和 from_graph 方法。

序列化?— ?to_graph

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

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

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

 

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

 

 

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

 

這會(huì)創(chuàng)建全量字典,以字段作為關(guān)鍵字,以每個(gè)字段對應(yīng)的 tensorflow 變量名作為值。

反序列化?— ?from_graph

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

 

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

 

 

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

 

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

完整的例子

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

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

完美!接下來我們將這個(gè)序列化后的模型存到內(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é)論

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

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

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

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

標(biāo)簽: ssd 代碼

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

上一篇:讀懂AI民族主義:機(jī)器學(xué)習(xí)技術(shù)如何影響國際關(guān)系?

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