天天看點

keras儲存模型_快速入門 TensorFlow2 模型部署,機器學習也可以這麼簡單預訓練模型使用方法

機器學習問題不僅是一個科學問題,更是一個工程問題。

大多數年輕的資料科學家都希望将大部分時間花在建構完美的機器學習模型上,但是企業不僅需要訓練一個完美的模型,同時也需要将其部署,向使用者提供便捷的服務。

如下圖所示,機器學習系統由機器學習代隻包含一小部分,而在中間的小黑匣子周圍,所需要的基礎設施龐大而複雜。

keras儲存模型_快速入門 TensorFlow2 模型部署,機器學習也可以這麼簡單預訓練模型使用方法

是以,在實際應用中,一個優秀的程式員不僅要學會建構完美的機器學習模型上,同時還需要将其部署向使用者提供便捷的服務。

在本教程中,筆者将重點放到了機器學習模型部署上面,并使用最為熱門的 TensorFlow 2 架構完成實踐。

此教程内容節選自實驗樓近期好課《TensorFlow 2 模型部署方法實踐》,教程采用的實驗環境均為實驗樓提供的線上web環境。

keras儲存模型_快速入門 TensorFlow2 模型部署,機器學習也可以這麼簡單預訓練模型使用方法

強烈建議想跟着教程學習的小夥伴可以登陸實驗樓官網,直接上手敲代碼會更好。

預訓練模型使用方法

首先,我們聊聊預訓練模型使用方法。

1.介紹

本節實驗将介紹 MobileNet 系列中的 MobileNetV2 模型,MobileNet 是為移動端和嵌入式端深度學習應用所設計的網絡,使得在 CPU 上訓練也能達到理想的速度要求。

後續的實驗中,我們将使用此模型進行部署示範。

2.知識點

Keras 導入預訓練模型預訓練模型的使用方法儲存模型為 HDF5 格式儲存模型為 SavedModel 格式

3.環境配置

目前,TensorFlow 2 已正式釋出,你需要通過 pip install -U tensorflow 進行更新安裝。線上環境中,我們需要先解除安裝老版本,然後再安裝 TensorFlow 2。

# 解決線上環境的一些依賴問題,本地無需這些操作!pip install --upgrade pip msgpack setuptools h5py!pip uninstall tensorflow -y!pip install -U --ignore-installed wrapt
           
!pip install tensorflow  # 安裝 TensorFlow 2.0
           

4.選擇圖檔

在本實驗中,我們使用 skimage 庫中的自帶圖檔進行圖像識别。skimage 中自帶一張貓的圖檔,稍後我們用這張圖檔進行識别任務。

from skimage import dataimport matplotlib.pyplot as plt%matplotlib inline# skimage 中自帶一張貓的圖檔image = data.chelsea()plt.imshow(image)
           

(注:如果你對課程所使用的實驗樓 Notebook 線上環境不熟悉,可以先學習課程《實驗樓 Notebook 線上環境使用指南》。)

5.導入預訓練模型

接下來從 Keras-applications 中導入預訓練模型 MobileNetV2。由于原模型托管在海外伺服器,在實驗樓環境中,需要将預訓練模型從實驗樓鏡像伺服器下載下傳到 ~/.keras/models 目錄下,友善後續載入模型。

# 下載下傳預訓練模型到線上環境指定目錄!wget -nc "https://labfile.oss.aliyuncs.com/courses/1435/mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224.h5" -P "/root/.keras/models"!wget -nc "https://labfile.oss.aliyuncs.com/courses/1435/imagenet_class_index.json" -P "/root/.keras/models"
           

通過指定權重 weights='imagenet' 來載入 ImageNet 預訓練模型。

from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2# 載入 ImageNet 預訓練模型model = MobileNetV2(weights='imagenet')model.summary()
           

6.資料處理

接下來,我們嘗試對上面的示例圖檔進行識别,首先需要将圖檔處理成預訓練模型可以輸入的形狀。我們将圖像放縮到 224*224 的大小,并在圖像矩陣前面增加一維,即将 (224,224,3) 的圖像矩陣變成 (1,224,224,3)。

然後,可以調用 preprocess_input 方法将向量處理成 MobileNetV2 最終支援的輸入類型。

!pip install opencv-python==4.1.2.30  # 安裝所需 OpenCV
           
from tensorflow.keras.applications.mobilenet_v2 import preprocess_inputimport numpy as npimport cv2# 将圖像放縮到 224*224 的大小image = cv2.resize(image, (224, 224))# 将圖像矩陣前面增加一維,即将 (224,224,3) 的圖像矩陣變成 (1,224,224,3)x = np.expand_dims(image, 0)# 預處理圖像,在 Keras 中,在傳入圖檔數組值 (0-255) 的基礎之上,# 進行先除以 127.5,然後減 1,最後将值的範圍為放縮到 (-1,1) 上x = preprocess_input(x)x.shape
           

7.模型預測

接下來,使用 model 中的 predict 對輸入資料進行預測,模型輸出為一個 (1,1000) 的向量,向量中每個元素表示對應标簽的預測值。

output = model.predict(x)output.shape
           

這裡使用 decode_predictions 對模型輸出的向量進行解碼,解碼的結果就是預測的結果,這裡 top=5 表示輸出前五個最有可能的類别。

from tensorflow.keras.applications.mobilenet_v2 import decode_predictionspreds = decode_predictions(output, top=5)preds
           

通過輸出結果可以看到,模型預測圖檔最可能的類别是 Egyptian cat。

8.儲存模型

我們可以在訓練期間和訓練完成後,對模型進行儲存,而模型部署就是使用儲存後的模型進行實際應用。在訓練過程中, TensorFlow 2 提供了兩種方式來儲存模型。

1)HDF5 檔案

在實驗的一開始,我們下載下傳下來的預訓練模型mobilenet_v2_weights_tf_dim_ordering_tf_kernels_1.0_224.h5 是 HDF5 格式的檔案,可以将儲存的模型視為單個二進制 blob,裡面同時儲存了模型權重、模型結構和優化器配置。

2)SavedModel

在 TensorFlow 2 中,還提供了 SavedModel 方式來儲存模型,SavedModel 的優點是與語言無關,如可以在 Python 中訓練模型,然後在 Java 中加載。另外使用 TensorFlow Serving 來部署模型時必須使用 SavedModel 格式,SavedModel 轉換方法具體實作如下。

import tensorflow as tfimport timesaved_model_path = './saved_models/{}'.format(int(time.time()))# 建立一個 SavedModel,并将其放在帶有 tf.keras.experimental.export_saved_model 的帶時間戳的目錄中tf.keras.models.save_model(model, saved_model_path)
           

在 saved_model_path 目錄下,

.├── assets  ├── saved_model.pb  └── variables       ├── variables.data-00000-of-00001      └── variables.index  
           

saved_model.pb 為資料流圖檔案,它包含圖形結構, variables 檔案夾中儲存的是 ckpt 檔案集合,variables.data-xxx 儲存了參數的值,variables.index 儲存了對應的各個參數。

9.實驗總結

在本節實驗中,我們學習了 Keras-applications 預訓練模型的使用方法,并将預訓練模型從 h5 格式轉換為 SavedModel 格式。在之後的實驗,我們都将使用本實驗中的模型、處理方法以及生成結果。下一節實驗中,我們将使用 TensorFlow Serving 讀取 SavedModel 進行部署。

《TensorFlow 2 模型部署方法實踐》的第一節實驗就結束了。想通路後續教程的朋友,可以登入實驗樓官網,搜尋《TensorFlow 2 模型部署方法實踐》,之後的實驗還有:

keras儲存模型_快速入門 TensorFlow2 模型部署,機器學習也可以這麼簡單預訓練模型使用方法

現在該課還有試學機會可以體驗哦。

補充閱讀:

新人可先選擇實驗樓的入門課程學習:

《TensorFlow 2.0 新特性快速入門》

《實驗樓 Notebook 線上環境使用指南》

《JavaScript 基礎課程》

《Python Flask Web 架構》

繼續閱讀