將 Keras 模型匯入 TensorFlow.js

Keras 模型 (通常透過 Python API 建立) 可以儲存為數種格式之一。「完整模型」格式可以轉換為 TensorFlow.js Layers 格式,可以直接載入 TensorFlow.js 以進行推論或進一步訓練。

目標 TensorFlow.js Layers 格式是一個目錄,其中包含 model.json 檔案和一組二進位格式的分片權重檔案。model.json 檔案包含模型拓撲 (又稱「架構」或「圖表」:圖層的說明及其連線方式) 和權重檔案的資訊清單。

需求條件

轉換程序需要 Python 環境;您可能會想使用 pipenvvirtualenv 來保持隔離的環境。若要安裝轉換器,請使用 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 程式碼。