将 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 中

使用 Web 服务器来提供您在步骤 1 中生成的已转换模型文件。请注意,您可能需要配置服务器以允许跨源资源共享 (CORS),以便允许在 JavaScript 中获取文件。

然后,通过提供指向 model.json 文件的 URL 将模型加载到 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 结构的 Keras 模型。使用不受支持的操作或层的模型(例如自定义层、Lambda 层、自定义损失或自定义指标)无法自动导入,因为它们依赖于无法可靠地转换为 JavaScript 的 Python 代码。