使用keras和tensorflow保存為可部署的pb格式
Keras保存為可部署的pb格式
加載已訓(xùn)練好的.h5格式的keras模型
傳入如下定義好的export_savedmodel()方法內(nèi)即可成功保存
import keras import os import tensorflow as tf from tensorflow.python.util import compat from keras import backend as K def export_savedmodel(model): ''' 傳入keras model會(huì)自動(dòng)保存為pb格式 ''' model_path = "model/" # 模型保存的路徑 model_version = 0 # 模型保存的版本 # 從網(wǎng)絡(luò)的輸入輸出創(chuàng)建預(yù)測(cè)的簽名 model_signature = tf.saved_model.signature_def_utils.predict_signature_def( inputs={'input': model.input}, outputs={'output': model.output}) # 使用utf-8編碼將 字節(jié)或Unicode 轉(zhuǎn)換為字節(jié) export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version))) # 將保存路徑和版本號(hào)join builder = tf.saved_model.builder.SavedModelBuilder(export_path) # 生成"savedmodel"協(xié)議緩沖區(qū)并保存變量和模型 builder.add_meta_graph_and_variables( # 將當(dāng)前元圖添加到savedmodel并保存變量 sess=K.get_session(), # 返回一個(gè) session 默認(rèn)返回tf的sess,否則返回keras的sess,兩者都沒有將創(chuàng)建一個(gè)全新的sess返回 tags=[tf.saved_model.tag_constants.SERVING], # 導(dǎo)出模型tag為SERVING(其他可選TRAINING,EVAL,GPU,TPU) clear_devices=True, # 清除設(shè)備信息 signature_def_map={ # 簽名定義映射 tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: # 默認(rèn)服務(wù)簽名定義密鑰 model_signature # 網(wǎng)絡(luò)的輸入輸出策創(chuàng)建預(yù)測(cè)的簽名 }) builder.save() # 將"savedmodel"協(xié)議緩沖區(qū)寫入磁盤. print("save model pb success ...") model = keras.models.load_model('model_data/weight.h5') # 加載已訓(xùn)練好的.h5格式的keras模型 export_savedmodel(model) # 將模型傳入保存模型的方法內(nèi),模型保存成功.
Tensorflow保存為可部署的pb格式
1、在tensorflow繪圖的情況下,使用tf.saved_model.simple_save()方法保存模型
2、傳入session
3、傳入保存路徑
4、傳入輸入占位符在inputs={“input_name”: 網(wǎng)絡(luò)輸入占位符變量}
5、傳入輸出變量在outputs={“output_name1”: 網(wǎng)絡(luò)輸出變量, “output_name2”: 網(wǎng)絡(luò)輸出變量}
即可成功保存為可部署的pb格式
tf.saved_model.simple_save(sess, "./model", inputs={"myInput": x}, # input_name可自定義,編碼客戶端時(shí)對(duì)應(yīng)即可 outputs={"myOutput": y})
保存好模型后會(huì)得到這樣格式文件證明你保存沒有問題了
variables/ variables.data-*****-of-***** variables.index saved_model.pb
print_r('點(diǎn)個(gè)贊吧'); var_dump('點(diǎn)個(gè)贊吧'); NSLog(@"點(diǎn)個(gè)贊吧!") System.out.println("點(diǎn)個(gè)贊吧!"); console.log("點(diǎn)個(gè)贊吧!"); print("點(diǎn)個(gè)贊吧!"); printf("點(diǎn)個(gè)贊吧!\n"); cout << "點(diǎn)個(gè)贊吧!" << endl; Console.WriteLine("點(diǎn)個(gè)贊吧!"); fmt.Println("點(diǎn)個(gè)贊吧!") Response.Write("點(diǎn)個(gè)贊吧"); alert('點(diǎn)個(gè)贊吧')
補(bǔ)充知識(shí):將Keras保存的HDF5或TensorFlow保存的PB模型文件轉(zhuǎn)化為Inter Openvino使用的IR(.xml & .bin)文件
本blog依據(jù)英特爾官方手冊(cè)《Model Optimizer Developer Guide》 翻譯編寫,經(jīng)博主測(cè)試可用
intel NCS & OpenVINO
英特爾官方的NCS開發(fā)環(huán)境“OpenVINO”使用了名為Intermediate Representation(IR)的網(wǎng)絡(luò)模型,其中.xml文件保存了網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),而.bin文件以二進(jìn)制方式保存了模型的權(quán)重w與偏差b。
首先我們需要配置Model Optimizer
如果是安裝適用于所有框架的Model Optimizer:
在安裝完OpenVINO后,我們找到以下位置:
<INSTALL_DIR>/deployment_tools/model_optimizer/install_prerequisites
運(yùn)行以下命令:
對(duì)于Linux系統(tǒng):
install_prerequisites.sh
對(duì)于Windows系統(tǒng):
install_prerequisites.bat
如果只安裝適用于特定框架的Model Optimizer:
在安裝完OpenVINO后,我們找到以下位置:
<INSTALL_DIR>/model_optimizer/install_prerequisites
運(yùn)行以下命令:
對(duì)于Caffe (Linux):
install_prerequisites_caffe.sh
對(duì)于Caffe (Windows):
install_prerequisites_caffe.bat
對(duì)于TensorFlow (Linux):
install_prerequisites_tf.sh
對(duì)于TensorFlow (Windows):
install_prerequisites_tf.bat
對(duì)于MXNet (Linux):
install_prerequisites_mxnet.sh
對(duì)于MXNet (Windows):
install_prerequisites_mxnet.bat
對(duì)于Kaldi (Linux):
install_prerequisites_kaldi.sh
對(duì)于Kaldi (Windows):
install_prerequisites_kaldi.bat
對(duì)于ONNX (Linux):
install_prerequisites_onnx.sh
對(duì)于ONNX (Windows):
install_prerequisites_onnx.bat
如果我們要將TensorFlow保存的PB模型轉(zhuǎn)換為IR……
如果我們要將Keras保存的HDF5模型轉(zhuǎn)換為IR……
博主電腦在英特爾返廠維修中 待更新……
以上這篇使用keras和tensorflow保存為可部署的pb格式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用python實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送客戶端示例
下面小編就為大家分享一篇利用python實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送客戶端示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12Python基于socket實(shí)現(xiàn)簡(jiǎn)單的即時(shí)通訊功能示例
這篇文章主要介紹了Python基于socket實(shí)現(xiàn)簡(jiǎn)單的即時(shí)通訊功能,涉及Python基于socket模塊實(shí)現(xiàn)tcp通信客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Spring @Enable模塊驅(qū)動(dòng)原理及使用實(shí)例
這篇文章主要介紹了Spring @Enable模塊驅(qū)動(dòng)原理及使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解
這篇文章主要介紹了Python打包模塊wheel的使用方法與將python包發(fā)布到PyPI的方法詳解,需要的朋友可以參考下2020-02-02淺談python中copy和deepcopy中的區(qū)別
Python學(xué)習(xí)過程中會(huì)遇到許多問題,最近對(duì)copy和deepcopy略感困惑,下面對(duì)其進(jìn)行解答,需要的朋友可以參考。2017-10-10使用python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù)的方法
這篇文章主要介紹了使用 python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù),但是這種方法不要傳輸機(jī)密文件,安全性不高,只用到http協(xié)議沒有使用任何加密協(xié)議,具體實(shí)現(xiàn)方法跟隨小編一起看看吧2019-11-11