<commit_before># 开始使用TensorFlow Lite

TensorFlow Lite提供了转换TensorFlow模型，并在移动端(mobile)、嵌入式(embeded)和物联网(IoT)设备上运行TensorFlow模型所需的所有工具。以下指南将逐步介绍开发人员各环节的工作流程，并给出了指向更多说明的链接。

## 1. 选择一个模型

<a id="1_choose_a_model"></a>

TensorFlow Lite允许您在多种设备上运行TensorFlow模型。TensorFlow模型是一种数据结构，这种数据结构包含了在解决一个特定问题时，训练得到的机器学习网络的逻辑和知识。

有多种方式可以获得TensorFlow模型，从使用预训练模型(pre-trained models)到训练自己的模型。为了在TensorFlow Lite中使用模型，模型必须转换成一种特殊格式。这将在第二节[转换模型](#2_convert_the_model_format)中解释。

Note: 不是所有的TensorFlow模型都能在TensorFlow Lite中运行，因为解释器只支持部分(a limited subset)TensorFlow运算符(operations)。参考第二节[转换模型](#2_convert_the_model_format)来了解兼容性。

### 使用预训练模型

TensorFlow Lite团队提供了一系列预训练模型(pre-trained models)，用于解决各种机器学习问题。这些模型已经转换为能与TensorFlow Lite一起使用，且可以在您的应用程序中使用的模型。

这些预训练模型包括：

*	[图像分类(Image classification)](../models/image_classification/overview.md)
*	[物体检测(Object detection)](../models/object_detection/overview.md)
*	[智能回复(Smart reply)](../models/smart_reply/overview.md)
*	[姿态估计(Pose estimation)](../models/pose_estimation/overview.md)
*	[语义分割(Segmentation)](../models/segmentation/overview.md)

在[模型列表(Models)](../models)中查看预训练模型的完整列表。

#### 来自其他来源的模型

您还可以在其他许多地方得到预训练的TensorFlow模型，包括[TensorFlow Hub](https://www.tensorflow.org/hub)。在大多数情况下，这些模型不会以TensorFlow Lite格式提供，您必须在使用前[转换(convert)](#2_convert_the_model_format)这些模型。

### 重新训练模型(迁移学习)

迁移学习(transfer learning)允许您采用训练好的模型并重新(re-train)训练，以执行其他任务。例如，一个[图像分类](../models/image_classification/overview.md)模型可以重新训练以识别新的图像类别。与从头开始训练模型相比，重新训练花费的时间更少，所需的数据更少。

您可以使用迁移学习，根据您的应用程序定制预训练模型。在<a href="https://codelabs.developers.google.com/codelabs/recognize-flowers-with-tensorflow-on-android">用TensorFlow识别花朵</a>的codelab中，您可以学习如何进行迁移学习。

### 训练自定义模型

如果您设计并训练了您自己的TensorFlow模型，或者您训练了从其他来源得到的模型，在使用前，您需要将此模型转换成TensorFlow Lite的格式。

## 2. 转换模型

<a id="2_convert_the_model_format"></a>

TensorFlow Lite的设计旨在在各种设备上高效执行模型。这种高效部分源于在存储模型时，采用了一种特殊的格式。TensorFlow模型在能被TensorFlow Lite使用前，必须转换成这种格式。

转换模型减小了模型文件大小，并引入了不影响准确性(accuracy)的优化措施(optimizations)。开发人员可以在进行一些取舍的情况下，选择进一步减小模型文件大小，并提高执行速度。您可以使用TensorFlow Lite转换器(converter)选择要执行的优化措施。

因为TensorFlow Lite支持部分TensorFlow运算符(operations)，所以并非所有模型都能转换。参看[Ops兼容性](#ops-compatibility)获得更多信息。

### TensorFlow Lite转换器

[TensorFlow Lite转换器](../convert)是一个将训练好的TensorFlow模型转换成TensorFlow Lite格式的工具。它还能引入优化措施(optimizations)，这将在第四节[优化您的模型](#4_optimize_your_model_optional)中介绍。

转换器以Python API的形式提供。下面的例子说明了将一个TensorFlow `SavedModel`转换成TensorFlow Lite格式的过程：

```python
import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
open("converted_model.tflite","wb").write(tflite_model)
```

您可以用类似的方法[转换TensorFlow 2.0模型](../r2/convert)

虽然也能从[命令行](../convert/cmdline_examples)使用用转换器，但是推荐用Python API进行转换。

### 选项

转换器可以从各种输入类型转换模型。

当转换[TensorFlow 1.x模型](../convert/python_api)时，这些输入类型有：

*	[SavedModel文件夹](https://www.tensorflow.org/alpha/guide/saved_model)
*	Frozen GraphDef (通过[freeze_graph.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py)生成的模型)
*	[Keras](https://keras.io)HDF5模型
*	从`tf.Session`得到的模型

当转换[TensorFlow 2.x模型](../r2/convert/python_api)时，这些输入类型有：

*	[SavedModel文件夹](https://www.tensorflow.org/alpha/guide/saved_model)
*	[`tf.keras`模型](https://www.tensorflow.org/alpha/guide/keras/overview)
*	[具体函数(Concrete functions)](../r2/convert/concrete_function.md)

转换器可以配置为应用各种优化措施(optimizations)，这些优化措施可以提高性能，减少文件大小。这将在第四节[优化您的模型](#4_optimize_your_model_optional)中介绍。

### Ops兼容性

TensorFlow Lite当前支持[一部分(limited subset)](ops_compatibility.md)TensorFlow运算符(operations)。长期目标是将来能支持全部的TensorFlow运算符。

如果您期望转换的模型中含有不受支持的运算符，您可以使用[TensorFlow Select](ops_select.md)包含来自TensorFlow的运算符。这会使得部署到设备上的二进制文件更大。


## 3. 使用模型进行推理

<a id="3_use_the_tensorflow_lite_model_for_inference_in_a_mobile_app"></a>

*推理(Inference)*是通过模型(model)运行数据(data)以获得预测(predictions)的过程。这个过程需要模型(model)，解释器(interpreter)，和输入数据(input data)。

### TensorFlow Lite 解释器

[TensorFlow Lite 解释器(interpreter)](inference.md)是一个库(library)，它接受模型文件(model file)，执行它在输入数据(input data)上定义的运算符(operations)，并提供对输出(output)的访问。

该解释器(interpreter)适用于多个平台，提供了一个简单的API，用于从Java, Swift, Objective-C, C++和Python运行TensorFlow Lite模型。

下面的代码显示了从Java调用解释器的方式:

```java
try (Interpreter interpreter = new Interpreter(tensorflow_lite_model_file)) {
	interpreter.run(input, output);
}
```

### GPU加速和委托

一些设备为机器学习运算符提供硬件加速(hardware acceleration)。例如，大多数移动电话有GPUs，GPU可以比CPU执行更快的浮点矩阵运算(floating point matrix operations)。

能有显著(substantial)的速度提升(speed-up)效果。例如，当使用GPU加速时，MobileNet v1图像分类模型在Pixel 3手机上的运行速度提高了5.5倍。

TensorFlow Lite解释器可以配置[委托(Delegates)](../performance/delegates.md)以在不同设备上使用硬件加速。[GPU委托(GPU Delegates)](../performance/gpu.md)允许解释器在设备的GPU上运行适当的运算符。

下面的代码显示了从Java中使用GPU委托的方式:
<commit_msg>zh-cn lite guide get_started modified links and words<commit_after># 开始使用TensorFlow Lite

TensorFlow Lite提供了转换TensorFlow模型，并在移动端(mobile)、嵌入式(embeded)和物联网(IoT)设备上运行TensorFlow模型所需的所有工具。以下指南将逐步介绍开发人员各环节的工作流程，并给出了指向更多说明的链接。

## 1. 选择一个模型

<a id="1_choose_a_model"></a>

TensorFlow Lite允许您在多种设备上运行TensorFlow模型。TensorFlow模型是一种数据结构，这种数据结构包含了在解决一个特定问题时，训练得到的机器学习网络的逻辑和知识。

有多种方式可以获得TensorFlow模型，从使用预训练模型(pre-trained models)到训练自己的模型。为了在TensorFlow Lite中使用模型，模型必须转换成一种特殊格式。这将在第二节[转换模型](#2_convert_the_model_format)中解释。

Note: 不是所有的TensorFlow模型都能在TensorFlow Lite中运行，因为解释器只支持部分(a limited subset)TensorFlow运算符(operations)。参考第二节[转换模型](#2_convert_the_model_format)来了解兼容性。

### 使用预训练模型

TensorFlow Lite团队提供了一系列预训练模型(pre-trained models)，用于解决各种机器学习问题。这些模型已经转换为能与TensorFlow Lite一起使用，且可以在您的应用程序中使用的模型。

这些预训练模型包括：

*	[图像分类(Image classification)](../models/image_classification/overview.md)
*	[物体检测(Object detection)](../models/object_detection/overview.md)
*	[智能回复(Smart reply)](../models/smart_reply/overview.md)
*	[姿态估计(Pose estimation)](../models/pose_estimation/overview.md)
*	[语义分割(Segmentation)](../models/segmentation/overview.md)

在[模型列表(Models)](../models)中查看预训练模型的完整列表。

#### 来自其他来源的模型

您还可以在其他许多地方得到预训练的TensorFlow模型，包括[TensorFlow Hub](https://www.tensorflow.org/hub)。在大多数情况下，这些模型不会以TensorFlow Lite格式提供，您必须在使用前[转换(convert)](#2_convert_the_model_format)这些模型。

### 重新训练模型(迁移学习)

迁移学习(transfer learning)允许您采用训练好的模型并重新(re-train)训练，以执行其他任务。例如，一个[图像分类](../models/image_classification/overview.md)模型可以重新训练以识别新的图像类别。与从头开始训练模型相比，重新训练花费的时间更少，所需的数据更少。

您可以使用迁移学习，根据您的应用程序定制预训练模型。在<a href="https://codelabs.developers.google.com/codelabs/recognize-flowers-with-tensorflow-on-android">用TensorFlow识别花朵</a>的codelab中，您可以学习如何进行迁移学习。

### 训练自定义模型

如果您设计并训练了您自己的TensorFlow模型，或者您训练了从其他来源得到的模型，在使用前，您需要将此模型转换成TensorFlow Lite的格式。

## 2. 转换模型

<a id="2_convert_the_model_format"></a>

TensorFlow Lite的设计旨在在各种设备上高效执行模型。这种高效部分源于在存储模型时，采用了一种特殊的格式。TensorFlow模型在能被TensorFlow Lite使用前，必须转换成这种格式。

转换模型减小了模型文件大小，并引入了不影响准确性(accuracy)的优化措施(optimizations)。开发人员可以在进行一些取舍的情况下，选择进一步减小模型文件大小，并提高执行速度。您可以使用TensorFlow Lite转换器(converter)选择要执行的优化措施。

因为TensorFlow Lite支持部分TensorFlow运算符(operations)，所以并非所有模型都能转换。参看[Ops兼容性](#Ops兼容性)获得更多信息。

### TensorFlow Lite转换器

[TensorFlow Lite转换器](../convert)是一个将训练好的TensorFlow模型转换成TensorFlow Lite格式的工具。它还能引入优化措施(optimizations)，这将在第四节[优化您的模型](#4_optimize_your_model_optional)中介绍。

转换器以Python API的形式提供。下面的例子说明了将一个TensorFlow `SavedModel`转换成TensorFlow Lite格式的过程：

```python
import tensorflow as tf

converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
open("converted_model.tflite","wb").write(tflite_model)
```

您可以用类似的方法[转换TensorFlow 2.0模型](../r2/convert)

虽然也能从[命令行](../convert/cmdline_examples)使用用转换器，但是推荐用Python API进行转换。

### 选项

转换器可以从各种输入类型转换模型。

当转换[TensorFlow 1.x模型](../convert/python_api)时，这些输入类型有：

*	[SavedModel文件夹](https://www.tensorflow.org/alpha/guide/saved_model)
*	Frozen GraphDef (通过[freeze_graph.py](https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py)生成的模型)
*	[Keras](https://keras.io)HDF5模型
*	从`tf.Session`得到的模型

当转换[TensorFlow 2.x模型](../r2/convert/python_api)时，这些输入类型有：

*	[SavedModel文件夹](https://www.tensorflow.org/alpha/guide/saved_model)
*	[`tf.keras`模型](https://www.tensorflow.org/alpha/guide/keras/overview)
*	[具体函数(Concrete functions)](../r2/convert/concrete_function.md)

转换器可以配置为应用各种优化措施(optimizations)，这些优化措施可以提高性能，减少文件大小。这将在第四节[优化您的模型](#4_optimize_your_model_optional)中介绍。

### Ops兼容性

TensorFlow Lite当前支持[一部分(limited subset)](ops_compatibility.md)TensorFlow运算符(operations)。长期目标是将来能支持全部的TensorFlow运算符。

如果您期望转换的模型中含有不受支持的运算符，您可以使用[TensorFlow Select](ops_select.md)包含来自TensorFlow的运算符。这会使得部署到设备上的二进制文件更大。


## 3. 使用模型进行推理

<a id="3_use_the_tensorflow_lite_model_for_inference_in_a_mobile_app"></a>

*推理(Inference)* 是通过模型(model)运行数据(data)以获得预测(predictions)的过程。这个过程需要模型(model)，解释器(interpreter)，和输入数据(input data)。

### TensorFlow Lite 解释器

[TensorFlow Lite 解释器(interpreter)](inference.md)是一个库(library)，它接受模型文件(model file)，执行模型文件在输入数据(input data)上定义的运算符(operations)，并提供对输出(output)的访问。

该解释器(interpreter)适用于多个平台，提供了一个简单的API，用于从Java, Swift, Objective-C, C++和Python运行TensorFlow Lite模型。

下面的代码显示了从Java调用解释器的方式:

```java
try (Interpreter interpreter = new Interpreter(tensorflow_lite_model_file)) {
	interpreter.run(input, output);
}
```

### GPU加速和委托

一些设备为机器学习运算符提供硬件加速(hardware acceleration)。例如，大多数移动电话有GPUs，GPU可以比CPU执行更快的浮点矩阵运算(floating point matrix operations)。

速度提升(speed-up)能有显著(substantial)效果。例如，当使用GPU加速时，MobileNet v1图像分类模型在Pixel 3手机上的运行速度提高了5.5倍。

TensorFlow Lite解释器可以配置[委托(Delegates)](../performance/delegates.md)以在不同设备上使用硬件加速。[GPU委托(GPU Delegates)](../performance/gpu.md)允许解释器在设备的GPU上运行适当的运算符。

下面的代码显示了从Java中使用GPU委托的方式:

{'fraction_non_alphanumeric': 0.13094227504244482, 'fraction_numerical': 0.004881154499151104, 'mean_word_length': 10.94550063371356, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 14, 'lorem ipsum': 0, 'www.': 8, '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': '1064771', 'n_tokens_mistral': 5407, 'n_tokens_neox': 5953, 'n_words': 298}