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 中
使用 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 代码。