Keras 模型 (通常透過 Python API 建立) 可以儲存為數種格式之一。「完整模型」格式可以轉換為 TensorFlow.js Layers 格式,可以直接載入 TensorFlow.js 以進行推論或進一步訓練。
目標 TensorFlow.js Layers 格式是一個目錄,其中包含 model.json
檔案和一組二進位格式的分片權重檔案。model.json
檔案包含模型拓撲 (又稱「架構」或「圖表」:圖層的說明及其連線方式) 和權重檔案的資訊清單。
需求條件
轉換程序需要 Python 環境;您可能會想使用 pipenv 或 virtualenv 來保持隔離的環境。若要安裝轉換器,請使用 pip install tensorflowjs
。
將 Keras 模型匯入 TensorFlow.js 是一個兩步驟程序。首先,將現有的 Keras 模型轉換為 TF.js Layers 格式,然後將其載入 TensorFlow.js。
步驟 1. 將現有的 Keras 模型轉換為 TF.js Layers 格式
Keras 模型通常透過 model.save(filepath)
儲存,這會產生一個包含模型拓撲和權重的單一 HDF5 (.h5) 檔案。若要將這類檔案轉換為 TF.js Layers 格式,請執行下列指令,其中path/to/my_model.h5
是來源 Keras .h5 檔案,而path/to/tfjs_target_dir
是 TF.js 檔案的目標輸出目錄
# bash
tensorflowjs_converter --input_format keras \
path/to/my_model.h5 \
path/to/tfjs_target_dir
替代方案:使用 Python API 直接匯出為 TF.js Layers 格式
如果您在 Python 中有 Keras 模型,您可以將其直接匯出為 TensorFlow.js Layers 格式,如下所示
# Python
import tensorflowjs as tfjs
def train(...):
model = keras.models.Sequential() # for example
...
model.compile(...)
model.fit(...)
tfjs.converters.save_keras_model(model, tfjs_target_dir)
步驟 2:將模型載入 TensorFlow.js
使用網路伺服器來提供您在步驟 1 中產生的轉換模型檔案。請注意,您可能需要設定伺服器以允許跨來源資源共用 (CORS),以便允許在 JavaScript 中擷取檔案。
然後提供 model.json
檔案的網址,將模型載入 TensorFlow.js
// JavaScript
import * as tf from '@tensorflow/tfjs';
const model = await tf.loadLayersModel('https://foo.bar/tfjs_artifacts/model.json');
現在模型已準備好進行推論、評估或重新訓練。例如,載入的模型可以立即用於進行預測
// JavaScript
const example = tf.fromPixels(webcamElement); // for example
const prediction = model.predict(example);
許多 TensorFlow.js 範例都採用這種方法,使用已轉換並託管在 Google Cloud Storage 上的預先訓練模型。
請注意,您使用 model.json
檔案名稱來參照整個模型。loadModel(...)
會擷取 model.json
,然後發出額外的 HTTP(S) 要求,以取得 model.json
權重資訊清單中參照的分片權重檔案。這種方法可讓瀏覽器 (以及網際網路上的其他快取伺服器) 快取所有這些檔案,因為 model.json
和權重分片都小於典型的快取檔案大小限制。因此,模型在後續載入時可能會更快。
支援的功能
TensorFlow.js Layers 目前僅支援使用標準 Keras 建構的模型。使用不支援的運算或圖層 (例如自訂圖層、Lambda 圖層、自訂損失或自訂指標) 的模型無法自動匯入,因為這些模型依賴無法可靠地轉換為 JavaScript 的 Python 程式碼。