keras和tensorflow保存爲可部署的pb格式

github博客傳送門
csdn博客傳送門python

Keras保存爲可部署的pb格式

加載已訓練好的.h5格式的keras模型
傳入以下定義好的export_savedmodel()方法內便可成功保存
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會自動保存爲pb格式
    '''
    model_path = "model/"  # 模型保存的路徑
    model_version = 0  # 模型保存的版本
    # 從網絡的輸入輸出建立預測的簽名
    model_signature = tf.saved_model.signature_def_utils.predict_signature_def(
        inputs={'input': model.input}, outputs={'output': model.output})
    # 使用utf-8編碼將 字節或Unicode 轉換爲字節
    export_path = os.path.join(compat.as_bytes(model_path), compat.as_bytes(str(model_version)))  # 將保存路徑和版本號join
    builder = tf.saved_model.builder.SavedModelBuilder(export_path)  # 生成"savedmodel"協議緩衝區並保存變量和模型
    builder.add_meta_graph_and_variables(  # 將當前元圖添加到savedmodel並保存變量
        sess=K.get_session(),  # 返回一個 session 默認返回tf的sess,不然返回keras的sess,二者都沒有將建立一個全新的sess返回
        tags=[tf.saved_model.tag_constants.SERVING],  # 導出模型tag爲SERVING(其餘可選TRAINING,EVAL,GPU,TPU)
        clear_devices=True,  # 清除設備信息
        signature_def_map={  # 簽名定義映射
            tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:  # 默認服務簽名定義密鑰
                model_signature  # 網絡的輸入輸出策建立預測的簽名
        })
    builder.save()  # 將"savedmodel"協議緩衝區寫入磁盤.
    print("save model pb success ...")

model = keras.models.load_model('model_data/weight.h5')  # 加載已訓練好的.h5格式的keras模型
export_savedmodel(model)  # 將模型傳入保存模型的方法內,模型保存成功.

Tensorflow保存爲可部署的pb格式

  1. 在tensorflow繪圖的狀況下,使用tf.saved_model.simple_save()方法保存模型
  2. 傳入session
  3. 傳入保存路徑
  4. 傳入輸入佔位符在inputs={"input_name": 網絡輸入佔位符變量}
  5. 傳入輸出變量在outputs={"output_name1": 網絡輸出變量, "output_name2": 網絡輸出變量}git

    便可成功保存爲可部署的pb格式
tf.saved_model.simple_save(sess,
            "./model",
            inputs={"myInput": x},  # input_name可自定義,編碼客戶端時對應便可
            outputs={"myOutput": y})

保存好模型後會獲得這樣格式文件證實你保存沒有問題了

variables/
    variables.data-*****-of-*****
    variables.index
saved_model.pb
print_r('點個贊吧');
var_dump('點個贊吧');
NSLog(@"點個贊吧!")
System.out.println("點個贊吧!");
console.log("點個贊吧!");
print("點個贊吧!");
printf("點個贊吧!\n");
cout << "點個贊吧!" << endl;
Console.WriteLine("點個贊吧!");
fmt.Println("點個贊吧!")
Response.Write("點個贊吧");
alert(’點個贊吧’)
相關文章
相關標籤/搜索