91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

tensorflow模型文件怎么轉pb文件

發布時間:2020-08-01 10:55:35 來源:億速云 閱讀:463 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了tensorflow模型文件怎么轉pb文件,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

使用tensorflow.python.tools.freeze_graph.freeze_graph

  • 使用graph_util.convert_variables_to_constants

1、tensorflow模型的文件解讀

使用tensorflow訓練好的模型會自動保存為四個文件,如下

tensorflow模型文件怎么轉pb文件

checkpoint:記錄近幾次訓練好的模型結果(名稱)。

xxx.data-00000-of-00001: 模型的所有變量的值(weights, biases, placeholders,gradients, hyper-parameters etc),也就是模型訓練好參數和其他值。

xxx.index :模型的元數據,二進制或者其他格式,不可直接查看 。是一個不可變得字符串表,每一個鍵都是張量的名稱,它的值是一個序列化的BundleEntryProto。 每個BundleEntryProto描述張量的元數據:“數據”文件中的哪個文件包含張量的內容,該文件的偏移量,校驗和一些輔助數據等。

xxx.meta:模型的meta數據 ,二進制或者其他格式,不可直接查看,保存了TensorFlow計算圖的結構信息,通俗地講就是神經網絡的網絡結構。

2、最常見的ckpt轉pb文件的方法

2、ckpt轉pb文件(freeze_graph.freeze_graph)

此種方法嘗試成功,雖然不知道輸出節點名,但是只要模型代碼還在就可以操作,直接上代碼。

import tensorflow as tf
import os
from tensorflow.python.tools import freeze_graph
from model import network # network是你們自己定義的模型結構(代碼結構)
# egs:
# def network(input):
# return tf.layers.softmax(input)
 
model_path = "model.ckpt-0000" #設置model的路徑,因新版tensorflow會生成三個文件,只需寫到數字前
 
def main():
 tf.reset_default_graph()
 # 設置輸入網絡的數據維度,根據訓練時的模型輸入數據的維度自行修改
 input_node = tf.placeholder(tf.float32, shape=(None, None, 200)) 
 output_node = network(input_node) # 神經網絡的輸出
 # 設置輸出數據類型(特別注意,這里必須要跟輸出網絡參數的數據格式保持一致,不然會導致模型預測  精度或者預測能力的丟失)以及重新定義輸出節點的名字(這樣在后面保存pb文件以及之后使用pb文件時直接使用重新定義的節點名字即可)
 flow = tf.cast(output_node , tf.float16, 'the_outputs') 
 saver = tf.train.Saver()
 with tf.Session() as sess:
 saver.restore(sess, model_path)
 #保存模型圖(結構),為一個json文件
 tf.train.write_graph(sess.graph_def, 'output_model/pb_model', 'model.pb')
 #將模型參數與模型圖結合,并保存為pb文件
 freeze_graph.freeze_graph('output_model/pb_model/model.pb', '', False, model_path, 'the_outputs','save/restore_all', 'save/Const:0', 'output_model/pb_model/frozen_model.pb', False, "")
 print("done")
if __name__ == '__main__':
 main()

2、ckpt轉pb文件(graph_util.convert_variables_to_constants)

沒有成功,因為不知道輸出節點的名字,使用該方法保存后的pb文件只有幾十k,無法使用,寫在這里主要是為了總結。直接上代碼,代碼里面沒有的庫(函數),按提示自行import。

def freeze_graph(input_checkpoint,output_graph):
 '''
 :param input_checkpoint:
 :param output_graph: PB模型保存路徑
 :return:
 '''
 # checkpoint = tf.train.get_checkpoint_state(model_folder) #檢查目錄下ckpt文件狀態是否可用
 # input_checkpoint = checkpoint.model_checkpoint_path #得ckpt文件路徑
 
 # 指定輸出的節點名稱,該節點名稱必須是原模型中存在的節點
 output_node_names = "InceptionV3/Logits/SpatialSqueeze"
 saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
 graph = tf.get_default_graph() # 獲得默認的圖
 input_graph_def = graph.as_graph_def() # 返回一個序列化的圖代表當前的圖
 
 with tf.Session() as sess:
 saver.restore(sess, input_checkpoint) #恢復圖并得到數據
 output_graph_def = graph_util.convert_variables_to_constants( # 模型持久化,將變量值固定
  sess=sess,
  input_graph_def=input_graph_def,# 等于:sess.graph_def
  output_node_names=output_node_names.split(","))# 如果有多個輸出節點,以逗號隔開
 
 with tf.gfile.GFile(output_graph, "wb") as f: #保存模型
  f.write(output_graph_def.SerializeToString()) #序列化輸出
 print("%d ops in the final graph." % len(output_graph_def.node)) #得到當前圖有幾個操作節點
 
 # for op in graph.get_operations():
 # print(op.name, op.values())
 
if __name__ == '__main__':
 # 輸入ckpt模型路徑
 input_checkpoint='models/model.ckpt-10000'
 # 輸出pb模型的路徑
 out_pb_path="models/pb/frozen_model.pb"
 # 調用freeze_graph將ckpt轉為pb
 freeze_graph(input_checkpoint,out_pb_path)

以上就是關于tensorflow模型文件怎么轉pb文件的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

千阳县| 溧阳市| 教育| 长宁县| 岗巴县| 永泰县| 杭锦后旗| 安宁市| 永清县| 洛南县| 双江| 宣化县| 松桃| 芦溪县| 岳普湖县| 普定县| 桓仁| 建平县| 昌黎县| 子洲县| 治县。| 眉山市| 溆浦县| 道孚县| 商南县| 鹰潭市| 海口市| 巴马| 凭祥市| 和顺县| 视频| 新蔡县| 涟源市| 娄烦县| 枝江市| 综艺| 沽源县| 福海县| 崇信县| 赫章县| 宽城|