1. 程式人生 > >tensorflow,使用freeze_graph.py將模型檔案和權重資料整合在一起並去除無關的Op

tensorflow,使用freeze_graph.py將模型檔案和權重資料整合在一起並去除無關的Op

這節是關於tensorflow的Freezing,字面意思是冷凍,可理解為整合合併;整合什麼呢,就是將模型檔案和權重檔案整合合併為一個檔案,主要用途是便於釋出。

這裡我按我的理解翻譯下,不對的地方請指正:

有一點令我們為比較困惑的是,tensorflow在訓練過程中,通常不會將權重資料儲存的格式檔案裡(這裡我理解是模型檔案),反而是分開儲存在一個叫checkpoint的檢查點檔案裡,當初始化時,再通過模型檔案裡的變數Op節點來從checkoupoint檔案讀取資料並初始化變數。這種模型和權重資料分開儲存的情況,使得釋出產品時不是那麼方便,所以便有了freeze_graph.py指令碼檔案用來將這兩檔案整合合併成一個檔案。

freeze_graph.py是怎麼做的呢?首行它先載入模型檔案,再從checkpoint檔案讀取權重資料初始化到模型裡的權重變數,再將權重變數轉換成權重 常量 (因為 常量 能隨模型一起儲存在同一個檔案裡),然後再通過指定的輸出節點將沒用於輸出推理的Op節點從圖中剝離掉,再重新儲存到指定的檔案裡(用write_graphdef或Saver)

檔案目錄:tensorflow/python/tools/free_graph.py

測試檔案:tensorflow/python/tools/free_graph_test.py 這個測試檔案很有學習價值

引數:

總共有11個引數,一個個介紹下(必選: 表示必須有值;可選: 表示可以為空):

1、input_graph:(必選)模型檔案,可以是二進位制的pb檔案,或文字的meta檔案,用input_binary來指定區分(見下面說明)

2、input_saver:(可選)Saver解析器。儲存模型和許可權時,Saver也可以自身序列化儲存,以便在載入時應用合適的版本。主要用於版本不相容時使用。可以為空,為空時用當前版本的Saver。

3、input_binary:(可選)配合input_graph用,為true時,input_graph為二進位制,為false時,input_graph為檔案。預設False

4、input_checkpoint:(必選)檢查點資料檔案。訓練時,給Saver用於儲存權重、偏置等變數值。這時用於模型恢復變數值。

5、output_node_names:(必選)輸出節點的名字,有多個時用逗號分開。用於指定輸出節點,將沒有在輸出線上的其它節點剔除。

6、restore_op_name:(可選)從模型恢復節點的名字。升級版中已棄用。預設:save/restore_all

7、filename_tensor_name:(可選)已棄用。預設:save/Const:0

8、output_graph:(必選)用來儲存整合後的模型輸出檔案。

9、clear_devices:(可選),預設True。指定是否清除訓練時節點指定的運算裝置(如cpu、gpu、tpu。cpu是預設)

10、initializer_nodes:(可選)預設空。許可權載入後,可通過此引數來指定需要初始化的節點,用逗號分隔多個節點名字。

11、variable_names_blacklist:(可先)預設空。變數黑名單,用於指定不用恢復值的變數,用逗號分隔多個變數名字。

用法:

例:python tensorflow/python/tools/free_graph.py \
--input_graph=some_graph_def.pb \ 注意:這裡的pb檔案是用tf.train.write_graph方法儲存的
--input_checkpoint=model.ckpt.1001 \ 注意:這裡若是r12以上的版本,只需給.data-00000....前面的檔名,如:model.ckpt.1001.data-00000-of-00001,只需寫model.ckpt.1001  
--output_graph=/tmp/frozen_graph.pb 

--output_node_names=softmax

另外,如果模型檔案是.meta格式的,也就是說用saver.Save方法和checkpoint一起生成的元模型檔案,free_graph.py不適用,但可以改造下:

1、copy free_graph.py為free_graph_meta.py

2、修改free_graph.py,匯入meta_graph:from tensorflow.python.framework import meta_graph

3、將91行到97行換成:input_graph_def = meta_graph.read_meta_graph_file(input_graph).graph_def

這樣改即可載入meta檔案

相關推薦

tensorflow使用freeze_graph.py模型檔案權重資料整合一起去除無關Op

這節是關於tensorflow的Freezing,字面意思是冷凍,可理解為整合合併;整合什麼呢,就是將模型檔案和權重檔案整合合併為一個檔案,主要用途是便於釋出。 這裡我按我的理解翻譯下,不對的地方請指正: 有一點令我們為比較困惑的是,tensorflow在訓練過程中,通常

spring mvc --上傳檔案檔案其他資料一起提交

jsp: var formdata = new FormData(); formdata.append('file', $('#file')[0].files[0]); //上傳檔案 formdata.append('id', $('#id').val(

tar---打包解壓縮linux的檔案目錄

tar命令可以為linux的檔案和目錄建立檔案。利用tar,可以為某一特定檔案建立檔案(備份檔案),也可以在檔案中改變檔案,或者向檔案中加入新的檔案。tar最初被用來在磁帶上建立檔案,現在,使用者可以在任何裝置上建立檔案。利用tar命令,可以把一大堆的檔案和目錄全部打包成一個檔案,這對於備份檔案或將幾個檔案組

使用正則表示式json.loads,JSON檔案中的資料轉化為pandas.DataFrame

使用正則表示式和json.loads,將JSON檔案中的資料轉化為pandas.DataFrame 說在前面 在使用Scrapy框架(爬蟲框架)爬取網頁資訊時,會定義一個ITEMS,然後通過PIPLINE將資料寫入到JSON檔案中,如果是按行寫入,則最後得到的資料就不是一個標準J

利用jqueryFrom傳檔案到servlet以及兩個伺服器之間傳檔案其他資料

專案背景:有兩個伺服器,一個是使用者操作的手機端伺服器,一個是後臺(響應前一個伺服器,並能訪問資料庫) 專案需求:使用者從手機端上傳身份證以及個人資訊,我們需要將資料傳給後臺,並且在資訊認證通過後將身份證照片存在後臺伺服器的D盤資料夾下。 jqueryForm上

android 建立檔案建立資料夾、assets下檔案複製到指定目錄下

1.獲取APP當前目錄路徑: public String getPath(){ File fileDire = getFilesDir();//獲取../data/應用的包名/fil

Ubantu下如何安裝mysql資料庫以及如何備份sql檔案執行sql檔案

  1. sudo apt-get install mysql-server   2. apt-get isntall mysql-client   3.  sudo apt-get install libmysqlclient-dev 安裝好mysql之後,檢查是否安裝成功:sudo netstat

Unity動態建立的Mesh匯出為Obj模型檔案生成Prefab檔案

Unity執行時,動態建立的Mesh掛載到MeshFilter元件上,並不能儲存到本地Prefab檔案裡。在執行的場景裡,拖拽正確配置的MeshFilter物件到Unity資源管理器。生成的Prefab檔案,裡面的Mesh物件會missing。所以,我們需要在執行狀態,匯

程式打成jar包後如何使用log4j.properties檔案因為外部jar

在eclipse中建的java project專案,打成jar檔案以後執行。發現各種錯誤。包括在ant達成jar檔案,當引入外部包,和外部檔案比如說log4j.properties檔案,老師報找不到異常。 下面自己的解決辦法, MANIFEST.mf 檔案內容:Manife

Unity3D 動態建立的Mesh匯出為Obj模型檔案生成Prefab檔案

Unity執行時,動態建立的Mesh掛載到MeshFilter元件上,並不能儲存到本地Prefab檔案裡。在執行的場景裡,拖拽正確配置的MeshFilter物件到Unity資源管理器。生成的Prefab檔案,裡面的Mesh物件會missing。所以,我們需要在執行狀態,匯出

angular2^ typescript 文件Json數據 合發送到服務器(1.客戶端處理)

src ica div .html web ready 進行 form med 首先介紹下框架基本流程 (web > webservice 【前端架構】 ) > (nodejs 【 數據中轉站 】) >(api 【後臺接口】) --web (htm

mysql匯入資料load data infile用法(txt檔案中的資料匯入表中)

我們常常匯入資料!mysql有一個高效匯入方法,那就是load data infile 下面來看案例說明   基本語法: load data  [low_priority] [local] infile 'file_name txt' [replace | ignor

[Xcode10 實際操作]七、檔案資料-(5 )複製、移動、刪除檔案刪除資料

本文將演示如何複製、移動和刪除檔案。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 over

excel檔案中的資料匯入到資料庫中的步驟

//1,在控制請中通過MultipartHttpServlerRequest multipartFiles獲取上傳的檔案 multipartFile file = multipartFiles.getFiles("file");//引數file是前端input上傳檔案標籤的name屬性;

關於post請求上傳檔案其它資料

1,背景: 在網上搜索這個問題得到的答案只有上傳檔案的單一上傳方式,並沒有說如果還需要其它請求引數的時候該如何處理。 2,解決方案: 通過append來加入其它請求引數,在上傳的時候還是用data:fromlsdata來上傳 3,相關程式碼: handleUp

bigemap如何衛星影像等高線疊加在一起

  第一步  影像下載/高程資料下載 影像須使用BIGEMAP地圖下載器中Google Earth無偏移影像,並具有無Google小水印、免封IP、影像更新更快等特點。         首

為什麼執行spark任務會在hadoop歷史伺服器上看到而在spark8080埠頁面work資料夾下面看不到?

通過oozie任務排程工具執行一個spark任務:spark程式:oozie任務:程式成功執行了,但在8080埠頁面看不到,在hadoop 19888歷史伺服器頁面可以看到這是怎麼回事?將上面那個spark程式打成jar包使用spark-sumbit --class 主類 .

session_id()session_regenerate_id()對原來session檔案其中資料是怎麼處理的

一、session_id()對原來session檔案和裡面的資料,是怎麼處理的? 測驗辦法:<?php$sid = md5("aaad");session_id($sid);session_start();var_dump(session_id());$_SESSION['ddd'] =

Python獲取資料夾下的檔案資料

筆者小白在寫程式碼的時候遇到的這樣的問題,就是說需要根據資料夾的路徑獲取該資料夾下面的所有的檔案和子資料夾。這裡就介紹python的os模組中的兩個函式:os.walk() 、os.listdir()。 os.walk() 該函式的原型是: os.wa

ajaxform實現檔案表單資訊一起提交

專案中有個模組提交表單需要提交檔案和其他的一些表單資訊,發現ajaxform實現起來較簡易 function sub(){ var value = $('select option:selected').val() va