<commit_before># 将Keras模型导入Tensorflow.js

Keras模型（通常通过Python API创建）可能被保存成[多种格式之一](https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model). 整个模型格式可以被转换为Tensorflow.js的层(Layer)格式，这个格式可以被加载并直接用作Tensorflow.js的推断或是进一步的训练。

转换后的TensorFlow.js图层(Layer)格式是一个包含model.json文件和一组二进制格式的分片权重文件的目录。 model.json文件包含模型拓扑结构（又名“架构(architecture)”或“图形(graph)”：它是对图层(Layer)及其连接方式的描述）和权重文件的清单。

## 要求

转换过程要求Python的编程环境，您可能需要独立的使用[pipenv](https://github.com/pypa/pipenv)或是[virtualenv](https://virtualenv.pypa.io)。并使用 `pip install tensorflowjs`安装转换器

将Keras模型导入Tensorflow.js需要两步过程。首先，将已有Keras模型转换成TF.js层(Layer)格式，然后将其加载进Tensorflow.js。

## Step 1. 将已有Keras模型转换成TF.js层(Layer)格式

Keras模型通常通过 `model.save(filepath)`进行保存，这样做会产生一个同时含有模型拓扑结构以及权重的HDF5(.h5)文件。如需要转换这样一个文件成为TF.js层格式，则可以运行以下代码。这里的`path/to/my_model.h5`为Keras .h5文件地址，而`path/to/tfjs_target_dir`则是对应输出的TF.js目录。

```sh
# bash

tensorflowjs_converter --input_format keras \
                       path/to/my_model.h5 \
                       path/to/tfjs_target_dir
```

## 另一种方式: 使用 Python API 直接导出为 TF.js 图层(Layer)格式

如果您有一个Python的Keras模型，您可以用以下方法直接输出一个Tensoflow.js图层(Layers)格式:


```py
# 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)
```

## Step 2: 将模型加载进Tensorflow.js

使用一个web服务器为您在步骤1中生成的转换后的模型文件提供服务。注意，您可能需要将您的服务器配置为[允许跨源资源共享(CORS)](https://enable-cors.org/), 以允许在 JavaScript 中提取文件。

然后通过提供model.json文件的URL将模型加载到TensorFlow.js中：


```js
// JavaScript

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

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

现在，该模型已准备好进行推理(inference)，评估(evaluation)或重新训练(re-training)。例如，模型完成加载后可以立即进行预测(predict)：


```js
// JavaScript

const example = tf.fromPixels(webcamElement);  // for example
const prediction = model.predict(example);
```

很多[Tensorflow.js样例](https://github.com/tensorflow/tfjs-examples)采用这种方法，使用已在 Google 云存储上转换和托管的预训练模型。

注意，您使用`model.json`文件名引用整个模型。`loadModel(...)` 获取 `model.json`，并且通过额外的HTTP(S)请求以获取`model.json`权重清单中引用的分片权重文件。 此方法允许浏览器将这些文件全部缓存(可还能被缓存在互联网上其他缓存服务器中)。这是因为 `model.json`和权重分块都小于典型的缓存文件大小限制。因此这个模型可能在随后的场景中加载地更快。


## 已支持的特性

TensorFlow.js的图层(Layers)目前仅支持基于标准Keras结构的Keras模型。 使用不支持的操作(ops)或层(layers)的模型 - 例如 自定义图层，Lambda图层，自定义损失(loss)或自定义指标(metrics)无法自动导入，因为它们依赖于无法被可靠地转换为JavaScript的Python代码。
<commit_msg>Translate import_keras.md via GitLocalize<commit_after># 将 Keras 模型导入 TensorFlow.js

Keras 模型（通常通过 Python API 创建）可能保存成[多种格式之一](https://keras.io/getting-started/faq/#how-can-i-save-a-keras-model)。“完整模型”格式可以转换成 TensorFlow.js Layers 格式，这种格式可以直接加载到 TensorFlow.js 中进行推断或进一步训练。

目标 TensorFlow.js Layers 格式是一个包含 <code>model.json</code> 文件和一组二进制格式的分片权重文件的目录。<code>model.json</code> 文件包含模型拓扑（又称“架构”或“计算图”：它是对层及其连接方式的描述）和权重文件的清单。

## 要求

转换过程需要 Python 环境；您可能需要使用 [pipenv](https://github.com/pypa/pipenv) 或 [virtualenv](https://virtualenv.pypa.io) 创建一个隔离环境。要安装转换器，请使用 `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 格式，可以运行以下命令，其中 <em><code data-md-type="codespan">path/to/my_model.h5</code></em> 是源 Keras .h5 文件，而 <em><code>path/to/tfjs_target_dir</code></em> 则是 TF.js 文件的目标输出目录：

```sh
# 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 格式：

```py
# 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)](https://enable-cors.org/)，以便允许提取 JavaScript 文件。

然后，通过提供 model.json 文件的网址将模型加载到 TensorFlow.js 中：

```js
// JavaScript

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

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

现在，模型已经可以进行推断、评估或重新训练。例如，加载的模型可以直接用于进行预测：

```js
// JavaScript

const example = tf.fromPixels(webcamElement);  // for example
const prediction = model.predict(example);
```

许多 [TensorFlow.js 示例](https://github.com/tensorflow/tfjs-examples)都采用这种方式，使用在 Google Cloud Storage 上转换和托管的预训练模型。

请注意，应使用 `model.json` 文件名引用整个模型。`loadModel(...)` 提取 `model.json`，然后通过发出额外的 HTTP(S) 请求来获取 `model.json` 权重清单中引用的分片权重文件。这种方式允许浏览器（可能还有互联网上的其他缓存服务器）缓存所有这些文件，这是因为 `model.json` 和权重碎片都小于典型的缓存文件大小限制。因此，模型可能在随后的场景中更快地加载。

## 支持的功能

TensorFlow.js Layers 目前仅支持使用标准 Keras 构造的 Keras 模型。使用不受支持的运算或层的模型（例如，自定义层、Lambda 层、自定义损失或自定义指标）无法自动导入，因为它们依赖的 Python 代码无法可靠地转换成 JavaScript。

{'fraction_non_alphanumeric': 0.13650275453988983, 'fraction_numerical': 0.0032646398694144052, 'mean_word_length': 5.527296937416778, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 12, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6809869', 'n_tokens_mistral': 2828, 'n_tokens_neox': 3001, 'n_words': 274}