将 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 来保持一个独立的环境,要安装转换器,请运行以下命令:


     
       
       
     
  1. 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 文件的目标输出路径:


     
       
       
     
  1. # bash

  2. tensorflowjs_converter --input_format keras \

  3.                       path/to/my_model.h5 \

  4.                       path/to/tfjs_target_dir


3其他方法:使用 Python API 直接导出为 TensorFlow.js Layers 格式


如果您在 Python 中使用 Keras 模型,则可以将其直接导出为 TensorFlow.js Layers 格式,如下所示:


     
       
       
     
  1. # Python

  2. import tensorflowjs as tfjs

  3. def train(...):

  4.    model = keras.models.Sequential()   # 举例

  5.    ...

  6.    model.compile(...)

  7.    model.fit(...)

  8.    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 中:


     
       
       
     
  1. // JavaScript

  2. import * as tf from '@tensorflow/tfjs';

  3. const model = await tf.loadModel('https://foo.bar/tfjs_artifacts/model.json');


现在,该模型已准备好进行推理、评估或重训练。例如,加载的模型可以立即用于预测:


     
       
       
     
  1. // JavaScript

  2. const example = tf.fromPixelswebcamElement);  //举例

  3. 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 和分割模型

了解tf.keras中模型训练验证的相关方法

从 Keras.layers.core 在创建模型时使用 theano 作为后端导入 Dense

如何将我的 keras 模型保存到谷歌驱动器或计算机中?

无法使用 Plaidml 在 GPU 上运行 Keras 模型