将 Keras 模型导入 TensorFlow.js
Posted 黑胡桃实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将 Keras 模型导入 TensorFlow.js相关的知识,希望对你有一定的参考价值。
Keras 模型(通常通过 Python API 创建)可以以多种格式保存。“整个模型”格式可以转换为可以直接加载到 TensorFlow.js 进行推理或进一步训练的 TensorFlow.js Layers 格式。
TensorFlow.js Layers 格式是一个包含 model.json 文件和一组二进制格式的权重分片文件的格式。model.json 文件包含模型拓扑(又名“architecture(架构)”或“graph(图)”:是对层及其连接方式的描述)和权重文件的清单。
1要求
转换过程需要 Python 环境;您可能需要 pipenv 或者 virtualenv 来保持一个独立的环境,要安装转换器,请运行以下命令:
pip install tensorflowjs
将 Keras 模型导入 TensorFlow.js 分为两步。首先,将现有的 Keras 模型转换为 TensorFlow.js Layers 格式,然后将其加载到 TensorFlow.js 中。
2步骤 1:将现有的 Keras 模型转换为 TensorFlow.js Layers 格式
Keras 模型通常通过 model.save(filepath) 保存,生成一个包含模型拓扑和权重的 HDF5(.h5)文件。要将此类文件转换为 TensorFlow.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
3其他方法:使用 Python API 直接导出为 TensorFlow.js Layers 格式
如果您在 Python 中使用 Keras 模型,则可以将其直接导出为 TensorFlow.js Layers 格式,如下所示:
# Python
import tensorflowjs as tfjs
def train(...):
model = keras.models.Sequential() # 举例
...
model.compile(...)
model.fit(...)
tfjs.converters.save_keras_model(model, tfjs_target_dir)
4步骤 2:将模型加载到 TensorFlow.js 中
使用 Web 服务器为在步骤 1 中生成的模型转换文件提供服务。请注意,为了允许在 javascript 中获取文件,您可能需要将服务器设置为 allow Cross-Origin Resource Sharing(CORS,允许跨源资源共享)。
然后利用 model.json 文件的 URL 将 model.json 文件中的模型加载到 TensorFlow.js 中:
// JavaScript
import * as tf from '@tensorflow/tfjs';
const model = await tf.loadModel('https://foo.bar/tfjs_artifacts/model.json');
现在,该模型已准备好进行推理、评估或重训练。例如,加载的模型可以立即用于预测:
// JavaScript
const example = tf.fromPixels(webcamElement); //举例
const prediction = model.predict(example);
许多 TensorFlow.js 示例 都采用此方法,使用已转换并托管在 Google Cloud 上的预训练模型。
请注意,您使用 model.json 文件名引用整个模型。 loadModel(...) 获取 model.json,然后发出额外的 HTTP(S)请求,以获取 model.json 中的权重清单引用的权重分片文件。因为 model.json 和权重分片都小于典型的缓存文件大小限制,所以这种方法允许浏览器缓存所有这些文件(可能还有互联网上的其他缓存服务器)。因此,模型在随后的情况下可能加载得更快。
5支持的功能
TensorFlow.js Layers 目前仅支持使用标准 Keras 构造的 Keras 模型。使用不受支持的 Ops(操作)或层(例如自定义层、lambda 层、自定义损失或自定义度量)的模型则不能自动导入,因为它们依赖于 Python 代码,无法可靠地转换为 JavaScript。
✄----------------------------------
本文是黑胡桃实验室与 Googler、GDE 协作翻译的 TensorFlow.js 中文尝鲜版,英文版首发于 https://js.tensorflow.org/
探索AI
触摸科技
黑胡桃实验室
杭州·赛银国际广场4幢1楼
BlackWalnut Labs.
以上是关于将 Keras 模型导入 TensorFlow.js的主要内容,如果未能解决你的问题,请参考以下文章
tensorflow 为 tensorflowjs 转换 keras 模型
AttributeError:无法导入 keras 和分割模型