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

2020-12-14 雷鋒網

雷鋒網(公眾號:雷鋒網)(公眾號:雷鋒網)按:本文為雷鋒字幕組編譯的技術博客,原標題 Smart way to serialize/deserialize classes to/from Tensorflow graph ,作者為 Francesco Zuppichini 。

翻譯 |王褘      整理 | MY


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

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

假設你有一個 Model 類。

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

假設我們已經訓練好了模型,現在我們想要把它保存下來。通常的模式是:

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

現在我們可以從 graph 中取出變量 variable 。

假如我們想要再次使用 model 類要怎麼辦?如果我們嘗試去調用 model.variable,得到的結果會是 None。

一個解決方案是重新構建整個模型,然後重新保存一個 graph 。

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

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

為了能夠將變量指針正確的重存進模型,你需要

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

TFGraphConvertible


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

讓我們來重新創建我們的模型。

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


序列化 —  to_graph

你可以通過調用 to_graph 方法來進行類的序列化,這個方法會創建一個以欄位為 key , tensorflow 變量名為值的字典。

你想要序列化哪些欄位來構建這個字典,那麼你需要將這些欄位作為 fields 參數傳入。

在下例中,我們傳入所有這些欄位。

這會創建全量字典,以欄位作為關鍵字,以每個欄位對應的 tensorflow 變量名作為值。

反序列化 —  from_graph

你可以通過調用 from_graph 方法來進行類的反序列化,這個方法通過我們在上文中構建的字典內容,將類中的欄位綁定到對應的 tensorflow 變量上。

現在你恢復了 model 。

完整的例子

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

首先,獲取數據集。

現在我們用這個數據集來進行訓練

完美!接下來我們將這個序列化後的模型存到內存中。

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

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

我們通過調用 from_graph 方法來重建它們

現在 mnist_model 已經可以使用了,我們來看一下在測試集上的精確度如何吧。

結論

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

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

通過這種方式,你可以通過面向對象編程的方式來直接創建模型,且無需重新構建就可以索引到所有的變量。

感謝您的閱讀。


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


雷鋒網雷鋒網

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 正確debug的TensorFlow的姿勢
    當討論在tensorflow上編寫代碼時,總是將其與PyTorch進行比較,討論框架有多複雜,以及為什麼要使用tf.contrib的某些部分,做得太爛了。此外,我認識很多數據科學家,他們只用Github上已有的repo來用tensorflow。對這個框架持這種態度的原因是非常不同的,但是今天讓我們關注更實際的問題:調試用tensorflow編寫的代碼並理解它的主要特性。
  • TensorFlow 2.0正式版官宣!深度集成Keras
    通過將Keras緊密集成到TensorFlow中、默認eager execution,以及Python函數執行,TensorFlow 2.0開發應用程式的經驗會讓Python開發者很熟悉。此外,現在可以使用多GPU支持,Cloud TPU支持將在未來發布。查看分布式訓練指南了解更多:https://www.tensorflow.org/guide/distributed_trainingTensorFlow 2.0在GPU上提供了許多性能改進。
  • TensorFlow極簡教程:創建、保存和恢復機器學習模型
    你可以簡單理解為權重被保存到 .chkp.data 文件中,你的圖和元數據被保存到 .chkp.meta 文件中。恢復操作和其它元數據一個重要的信息是,Saver 將保存與你的圖相關聯的任何元數據。這意味著加載元檢查點還將恢復與圖相關聯的所有空變量、操作和集合(例如,它將恢復訓練優化器)。當你恢復一個元檢查點時,實際上是將保存的圖加載到當前默認的圖中。
  • TensorFlow極速入門
    本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?首先是一些基礎概念,包括計算圖,graph 與 session,基礎數據結構,Variable,placeholder 與 feed_dict 以及使用它們時需要注意的點。
  • tensorflow極速入門
    一、前言目前,深度學習已經廣泛應用於各個領域,比如圖像識別,圖形定位與檢測,語音識別,機器翻譯等等,對於這個神奇的領域,很多童鞋想要一探究竟,這裡拋磚引玉的簡單介紹下最火的深度學習開源框架 tensorflow。本教程不是 cookbook,所以不會將所有的東西都事無巨細的講到,所有的示例都將使用 python。那麼本篇教程會講到什麼?
  • 令人困惑的TensorFlow!
    如果你仔細閱讀,你甚至可能已經發現了這個頁面(https://www.tensorflow.org/programmers_guide/graphs),該頁面涵蓋了我將以更準確和技術化的方式去解釋的內容。本節是一篇高級攻略,把握重要的直覺概念,同時忽略一些技術細節。那麼:什麼是計算圖?它本質上是一個全局數據結構:是一個有向圖,用於捕獲有關如何計算的指令。
  • tensorflow
    為了提供最有效的方法,本研究對眾所周知的深度卷積神經網絡體系結構進行了實驗。經測試Inception-v4的準確率要優於其他同類模型。本研究的模型是經過精心優化的深度卷積神經網絡體系結構,用於對選定的可回收對象類別進行分類,其數據將通過STM32硬體端進行分析進而控制整個垃圾分類系統。
  • 什麼是TensorFlow,TensorFlow教程
    TensorFlow教程目的:在今天的TensorFlow教程中,我們將學習什麼是TensorFlow,它在哪裡使用,它的不同特性,TensorFlow應用程式,最新版本及其優缺點,以及如何在項目中使用它。
  • 在Windows中安裝Tensorflow和Kears深度學習框架
    Python3.5Anacoda虛擬環境,我們將虛擬環境命名為tensorflow。圖 3-102.3 啟動Anaconda虛擬環境建立tensorflow的Anaconda虛擬環境後,就可以啟動這個虛擬環境了
  • TensorFlow發布JavaScript開發者的機器學習框架TensorFlow.js
    發布新的 TensorFlow 官方博客(http://blog.tensorflow.org/)與 TensorFlow YouTube 頻道;2. 面向 JavaScript 開發者的全新機器學習框架 TensorFlow.js;3.
  • Windows Server安裝tensorflow錯誤完美解決
    \Python35\lib\site-packages\tensorflow\python\pywrap_tensorflow.py」, line 41, infrom tensorflow.python.pywrap_tensorflow_internal import * File 「D:\Python35\lib\site-packages\tensorflow
  • tensorflow安裝教程
    tensorflow是谷歌開源的人工智慧庫,有最完善的生態支持。是進行人工智慧領域開發和科研的必備工具。本文在windows10下,藉助anacondaAnaconda安裝和使用,AkShare入門,安裝tensorflow2.0。
  • Tensorflow for Java 1.5 發布
    -- https://mvnrepository.com/artifact/org.tensorflow/tensorflow --><dependency>    <groupId>org.tensorflow</groupId>    <artifactId>tensorflow</artifactId>    <version
  • 玩轉TensorFlow?你需要知道這30功能
    它可以可視化展現模型運行過程中的日誌,而且對於標量、直方圖、分布、圖、圖像、音頻等都有各自的展示面板。網址是:https://t.co/CEVbcJTHLP?amp=12.0 版本將會有更多的功能!網址:https://www.tensorflow.org/guide/keras
  • 如何使用TensorFlow機器學習對圖像進行分類?
    有幾種方法可以開始使用Tensorflow,最簡單快速的方法是使用Docker:完成docker安裝後,即可安裝TensorFlow。要安裝Tensorflow docker鏡像,請鍵入:docker pull tensorflow / tensorflow:devel-1.12.0
  • 谷歌重磅推出TensorFlow Graphics:為3D圖像任務打造的深度學習利器
    它們將幾何先驗和約束顯式地建模到神經網絡中,為能夠以自監督的方式進行穩健、高效訓練的神經網絡架構打開了大門。從高級層面來說,計算機圖形學的pipeline需要3D物體及其在場景中的絕對位置、構成它們的材質的描述、光、以及攝像頭。然後,渲染器對這個場景描述進行解釋,生成一個合成渲染。
  • 這裡有一份TensorFlow2.0中文教程
    簡單的圖像分類任務探一探此文章中,機器之心為大家推薦一個持續更新的中文教程,方便大家更系統的學習、使用 TensorFlow 2.0 : 知乎專欄地址:https://zhuanlan.zhihu.com/c_1091021863043624960 Github 項目地址:https://github.com/czy36mengfei/tensorflow2
  • 如何在AMD的GPU上運行TensorFlow?
    /tensorflow-1.8.0-cp35-cp35m-manylinux1_x86_64.whlpip3 install ./tutorials/audio_recognition 以下是運行代碼: cd ~ && git clone https://github.com/tensorflow/tensorflow.gitcd ~/tensorflowpython3 tensorflow/examples/speech_commands/train.py 在默認設置下運行幾個小時後
  • Tensorflow新版來襲,不僅集成英偉達TensorRT,還支持JavaScript
    圖| TensorFlow Extended (TFX)這個新增的機器學習平臺,可讓開發者準備資料、訓練、驗證並把訓練好的模型快速部署在生產環境提供可用的服務另外,1.7.0版的TensorFlow也支持更多的語言以及平臺,它甚至也具備支持JavaScript的能力,可以在瀏覽器中通過網頁接口進行機器學習工作
  • 基於TensorFlow.js的JavaScript機器學習
    刷新頁面時,你可以在頁面左側看到一個面板,上面有數據的散點圖,如下圖。散點圖通常,在處理數據時,最好找到方法來查看數據,並在必要時對其進行清理。可視化數據可以讓我們了解模型是否可以學習數據的任何結構。對於tensorflow.js,我們必須構建神經網絡。將以下函數添加到script.js文件中以定義模型。這是我們可以在tensorflow.js中定義的最簡單的模型之一,我們來試下簡單分解每一行。