tensorboard ckpt pb 模型的輸出節點_算法工程化系列——模型固化

8e036b602d7d8a7d1424690054afb5e4.png

摘要

基于tensorflow訓練的模型一般被保存為ckpt形式的文件,隨著當前深度學習模型網絡越來越大,對應模型也會非常大。當對外提供服務的時候,如果采用ckpt的形式,服務進程被調起來非常困難,且推理服務一般速度也較慢(會達到100ms以上一次推理)。所以,使用固化后的模型進行推理服務非常必要,模型大小得到壓縮,服務時耗也得到大幅度降低。本文介紹幾種常見的模型固化方法。

1 session模式的模型

先行訓練好check point形式的模型文件,之所以這里區分session模式,因為這種模式使用者比較容易設置name_scope以及Tensor的命名,特別是輸入、輸出節點的名稱,這樣對于后面的固化非常重要。代碼如下:

#!/usr/bin/env python

# coding=utf-8

from __future__ import print_function

import os,sys,time

import numpy as np

import tensorflow as tf

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"

os.environ["CUDA_VISIBLE_DEVICES"] = "7"

import tensorflow.contrib.slim as slim

from tensorflow.python.framework import graph_util

#此文件可以把ckpt模型轉為pb模型

def freeze_graph(input_checkpoint,output_graph):

# checkpoint = tf.train.get_checkpoint_state(model_folder) #

# input_checkpoint = checkpoint.model_checkpoint_path #

output_node_names = "score_student/output_student"

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(","),

variable_names_whitelist=None,variable_names_blacklist=None)#

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))

#

input_checkpoint='/data/.../best_validation'

out_pb_path='/data/.../pbmodel/frozen_model_for_best_validation20190821.pb'

freeze_graph(input_checkpoint, out_pb_path)

2 estimator形式的模型

包括TPUEstimator形式,最常見的就是BERT模型[1]了,你很難去找里面的各種tensor的變量(本人親自嘗試使用tensorboard進行查找)。【當然使用一次遷移學習轉換一下形式也是可以解決這個問題的】,這里提供另外一種簡單的解決方法,代碼如下:【相關表達方式還有好幾種】

首先使用正常模型訓練一個ckpt形式的模型,然后進行轉化pb格式固化。

在bert代碼中注釋掉原來的train步驟

#estimator.train(input_fn=train_input_fn, max_steps=num_train_steps)

#定義里面的輸入數據名稱及shape:

feature_spec = {

"input_ids": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"input_mask": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"segment_ids": tf.FixedLenFeature([FLAGS.max_seq_length], tf.int64),

"start_ps": tf.FixedLenFeature([], tf.int64),#@debuluoyi

"end_ps": tf.FixedLenFeature([], tf.int64),#@debuluoyi

"label_ids": tf.FixedLenFeature([], tf.int64), }

#固化轉換

receiver_fn=tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)

estimator._export_to_tpu = False

print("begin to export_savedmodel el model.pb") estimator.export_savedmodel('/data/.../pbmodel/bert_el_model20191023_2_pbmodel',serving_input_receiver_fn =receiver_fn)

3 小結

模型固化對于對外提供服務很重要,另外還有一個很重要的點就是接下來進行壓縮,壓縮很多基于pb固化模型進行也有多種方便,由此體現模型固化在實際算法工程中是非常重要且常見的技術點,一般能夠將模型大小壓縮數倍,服務調起更加輕便,基于GPU的推理時間也能節約數倍。

參考文獻

[1] https://github.com/google-research/bert;

google-research/bert?github.com
1887410f9021448f2fd0353ab9187d06.png

[2] 本人GitHub:

debuluoyi - Overview?github.com
af35f491d30cb2bda266e7be14a909c3.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533824.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度linux內核升級,深度操作系統 2020.11.11 更新發布:內核升級

原標題:深度操作系統 2020.11.11 更新發布:內核升級IT之家11月11日消息 今日,深度操作系統宣布2020.11.11 更新現已發布。本次更新包括升級內核、Debian 10.6 倉庫以及系統安全性更新。系統安全方面,本次更新修復了 Firefox-ESR 安…

unity 使用mysql實現登錄注冊_用mysql實現登錄注冊功能

1、創建用戶表表結構如下idunameupwdisdelete注意:需要對密碼進行加密。如果使用md5加密,則密碼包含32個字符。如果使用sha1加密,則密碼包含40個字符,這里使用這種方式。md5加密方式:import hashlibpwd 123456my_md5 …

python爬電影_使用Python多線程爬蟲爬取電影天堂資源

最近花些時間學習了一下Python,并寫了一個多線程的爬蟲程序來獲取電影天堂上資源的迅雷下載地址,代碼已經上傳到GitHub上了,需要的同學可以自行下載。剛開始學習python希望可以獲得寶貴的意見。 先來簡單介紹一下,網絡爬蟲的基本實…

打不開磁盤配額linux,九度OJ 1455 珍惜現在,感恩生活 -- 動態規劃(背包問題)...

題目描述:為了挽救災區同胞的生命,心系災區同胞的你準備自己采購一些糧食支援災區,現在假設你一共有資金n元,而市場有m種大米,每種大米都是袋裝產品,其價格不等,并且只能整袋購買。請問&#xf…

erp 維護費 要交嗎_ERP系統維護費

今年8月,SAP中國公司宣布2009年1月1日前將由傳統支持服務轉向企業級支持服務(SAP Enterprise Support)。同時將開始實施漸進式定價方案,并預計在2012年之前,逐漸將所有客戶從現行的SAP Standard/Premium Support的定價協議過渡為SAP Enterpri…

sentinel 端口_Sentinel原理:控制臺是如何獲取到實時數據的

Sentinel 系列教程,現已上傳到 github 和 gitee 中:GitHub:https://github.com/all4you/sentinel-tutorialGitee:https://gitee.com/all_4_you/sentinel-tutorialSentinel 能夠被大家所認可,除了他自身的輕量級&#x…

linux桌面時區設置,如何在Ubuntu 20.04上設置或更改時區

對于許多與系統相關的任務和進程,使用正確的時區至關重要。 例如,cron守護程序使用系統的時區執行cron作業,而日志文件中的時間戳基于系統的同一時區。在Ubuntu上,系統的時區是在安裝過程中設置的,但以后可以輕松更改。…

ironpython2.7.9_IronPython下載

IronPython是一種在 .NET 及 Mono上的 Python 實現,由微軟的 Jim Hugunin所發起,是一個開源的項目,基于微軟的DLR引擎;托管于微軟的開源網站 CodePlex。IronPython 的官方并未實現 Python通用類庫,僅實現了部分核心類。…

python 最小二乘回歸 高斯核_「機器學習」一文讀懂線性回歸、嶺回歸和Lasso回歸...

點擊上方藍色字體,關注AI小白入門喲作者 | 文杰編輯 | yuquanle本文介紹線性回歸模型,從梯度下降和最小二乘的角度來求解線性回歸問題,以概率的方式解釋了線性回歸為什么采用平方損失,然后介紹了線性回歸中常用的兩種范數來解決過…

天宮初級認證答案_跨境電商人才初級認證試題以及答案

跨境電商人才初級認證試題以及答案跨境電商人才初級認證試題一,單選題(共40題,每題1分,共40分)1.在拍攝反光性產品時,就是從哪個角度進行拍攝的A、正面B、側面參考答案:B2.信用證就是一種( )信用A、商業B、銀行C、民間D、企業參考答案:B3、阿里巴巴專業術語中,MA的全…

Linux打包軟件版本帶時間,帶你寫一個 linux 下的打包軟件 tar

相信你對 linux 的 .tar.gz 有點熟悉,這就是先 tar 打包(.tar 后綴),再對此 tar 文件用 gzip 壓縮(.tar.gz)的后綴名。值得注意的是, tar 不是壓縮軟件,它只做把一堆文件/文件夾打包到一個文件(tar 文件)里的事情,而文…

優先隊列默認是小頂堆嗎_一分鐘帶你讀懂什么是堆?

堆其實就是一種特殊的隊列——優先隊列。 普通的隊列游戲規則很簡單:就是先進先出;但這種優先隊列搞特殊,不是按照進隊列的時間順序,而是按照每個元素的優先級來比拼,優先級高的在堆頂。 這也很容易理解吧,…

螺旋測微器b類不確定度_物理實驗直測量不確定度評估.ppt

物理實驗直測量不確定度評估直接測量不確定度評估 Gauss分布 測量列的平均值、標準差 A類不確定度 t分布 B類不確定度 直接測量的合成不確定度 Gauss分布 也稱正態分布。 δ的平均值等于0、方差為σ。 特征: 對稱性——大于平均值與小于平均值的概率相等&#xff1b…

python 執行shell_python執行shell命令的方法

python執行shell命令的方法 os模塊 os.system方式: import os os.system(top) os.system(cat /proc/cpuinfo) 說明 這個調用相當直接,且是同步進行的,程序需要阻塞并等待返回。 返回值是依賴于系統的,直接返回系統的調用返回值&am…

linux下c語言讀取roed文件,如何在Linux系統上安裝Android4.4.docx

Android (x86)項目致力于移植 Android系統到X86處理器上,使用戶可以更容易的在任何電腦上安裝Android。他們通過使用android源碼,增加補丁來使 Android能夠在X86處理器,筆記本電腦和平板 電腦下工作。前一段時間,項目組發布了最新…

微信小程序setinterval_簡單談談setTimeout與setInterval

感謝踩過的坑sf社區的第一篇文章。最近在做一個拍賣的微信小程序,用到了定時器setTimout和setInterval,簡單談談這兩個api。setTimeout最常見的用法就是第二種(第三種mdn文檔不推薦),如:var timeoutId setTimeout(function() {console.log(hello world!…

python 注釋一段話_Python快速入門(一)

引言Python作為一個,目前最火的編程語言之一,已經滲透到了各行各業。它易學好懂,擁有著豐富的庫,功能齊全。人生苦短,就用Python。這個快速入門系列分為六篇,包含了Python大部分基礎知識,每篇閱…

linux ibus獲取窗體位置,Ubuntu 12.04 顯示ibus 的輸入框

在虛擬機中安裝了Ubuntu 12.04,系統是英文版本的,我能接受,但是苦于沒有中文輸入法。起先,我是安裝SCIM,結果我折騰了半天,發現其只能在lib-office下使用。firefox,文字編輯器中都不能調出SCIM。無奈將其卸…

transporter上傳卡正在交付_【iOS】Xcode11使用Transporter將APP上傳到App Store,卡在正在驗證APP...

問題:在使用Transporter時,會卡主,一直顯示正在驗證APP在這里插入圖片描述解決方案一:利用V-P-N在這里插入圖片描述使用安全上網(V-P-N),雙擊打開iTMSTransporter,等待幾分鐘lichuangMacBook-Pro-3 ~ % /Ap…

python練手經典100例微盤_20個Python練手經典案例,能全做對的人確實很少!

100個Python練手小程序,學習python的很好的資料,覆蓋了python中的每一部分,可以邊學習邊練習,更容易掌握python。 如果你感覺學不會?莫慌,小編推薦大家加入群, 前面548中間377后面875&#xff0…