TensorFlow.js 3.0 中有哪些变化
发行说明在此处提供。一些值得注意的用户界面功能包括
自定义模块
我们提供对创建自定义 tfjs 模块的支持,以支持生成大小优化的浏览器包。向用户发送更少的 JavaScript 代码。要了解更多信息,请参阅本教程。
此功能针对浏览器中的部署,但启用此功能会推动下面描述的一些更改。
ES2017 代码
除了某些预编译包之外,我们现在通过 NPM 向用户提供代码的主要方式是作为ES 模块,使用ES2017 语法。这使开发人员能够利用现代 JavaScript 功能,并更好地控制他们向最终用户提供的代码。
我们的 package.json module
入口点指向 ES2017 格式的单个库文件(即不是包)。这使树形抖动和开发人员对下游转译的更大控制成为可能。
我们确实提供了一些替代格式作为预编译包,以支持旧版浏览器和其他模块系统。它们遵循下表中描述的命名约定,您可以从流行的 CDN(如 JsDelivr 和 Unpkg)加载它们。
文件名 | 模块格式 | 语言版本 |
tf[-package].[min].js* | UMD | ES5 |
tf[-package].es2017.[min].js | UMD | ES2017 |
tf[-package].node.js** | CommonJS | ES5 |
tf[-package].es2017.fesm.[min].js | ESM(单个扁平文件) | ES2017 |
index.js*** | ESM | ES2017 |
* [package] 指的是主 tf.js 包的子包的名称,如 core/converter/layers。[min] 描述了我们除了未压缩文件之外还提供压缩文件的位置。
** 我们的 package.json main
入口点指向此文件。
*** 我们的 package.json module
入口点指向此文件。
如果您通过 npm 使用 tensorflow.js,并且使用捆绑器,则可能需要调整捆绑器配置以确保它可以消费 ES2017 模块或将其指向我们 package.json 中的另一个条目。
@tensorflow/tfjs-core 默认情况下更精简
为了实现更好的树形抖动,我们不再默认在 @tensorflow/tfjs-core 中包含张量的链接/流畅 API。我们建议直接使用操作(运算符)以获得最小的包。我们提供一个导入import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';
,它会恢复链接 API。
我们也不再默认注册内核的梯度。如果您需要梯度/训练支持,您可以import '@tensorflow/tfjs-core/dist/register_all_gradients';
代码重组、内核和梯度注册表
我们已经重组了代码,使其更容易贡献运算符和内核,以及实现自定义运算符、内核和梯度。请参阅本指南以了解更多信息。
重大更改
可以在此处找到重大更改的完整列表,但它们包括删除所有 *Strict 运算符,如 mulStrict 或 addStrict。
从 2.x 升级代码
@tensorflow/tfjs 的用户
解决此处列出的任何重大更改(https://github.com/tensorflow/tfjs/releases)
@tensorflow/tfjs-core 的用户
解决此处列出的任何重大更改(https://github.com/tensorflow/tfjs/releases),然后执行以下操作
添加链接运算符增强器或直接使用运算符
而不是
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
const a = tf.tensor([1,2,3,4]);
const b = a.sum(); // this is a 'chained' op.
您需要执行
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
import '@tensorflow/tfjs-core/dist/public/chained_ops/sum'; // add the 'sum' chained op to all tensors
const a = tf.tensor([1,2,3,4]);
const b = a.sum();
您也可以使用以下导入导入所有链接/流畅 API
import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';
或者,您可以直接使用运算符(您也可以在此处使用命名导入)
import * as tf from '@tensorflow/tfjs-core';
import '@tensorflow/tfjs-backend-webgl';
const a = tf.tensor([1,2,3,4]);
const b = tf.sum(a);
导入初始化代码
如果您只使用命名导入(而不是 import * as ...
),那么在某些情况下您可能需要执行
import @tensorflow/tfjs-core
在程序顶部附近,这可以防止积极的树形摇动器丢弃任何必要的初始化。
从 1.x 升级代码
@tensorflow/tfjs 的用户
解决 此处 列出的任何重大更改。然后按照从 2.x 升级的说明进行操作。
@tensorflow/tfjs-core 的用户
解决 此处 列出的任何重大更改,选择下面描述的后端,然后按照从 2.x 升级的步骤进行操作。
选择后端
在 TensorFlow.js 2.0 中,我们将 cpu 和 webgl 后端移到了它们自己的包中。请参阅 @tensorflow/tfjs-backend-cpu、@tensorflow/tfjs-backend-webgl、@tensorflow/tfjs-backend-wasm、@tensorflow/tfjs-backend-webgpu,了解有关如何包含这些后端的说明。