升級至 TensorFlow.js 3.0

TensorFlow.js 3.0 的變更

版本資訊在此處提供。一些值得注意的使用者導向功能包括:

自訂模組

我們提供建立自訂 tfjs 模組的支援,以協助產生大小最佳化的瀏覽器套件組合。減少傳送給使用者的 JavaScript 程式碼。若要進一步瞭解此功能,請參閱本教學課程

此功能適用於瀏覽器中的部署,但啟用此功能會促使下列部分變更。

ES2017 程式碼

除了部分預先編譯的套件組合外,**我們現在將程式碼發佈到 NPM 的主要方式是採用 ES 模組ES2017 語法**。這可讓開發人員運用 新式 JavaScript 功能,並更妥善地掌控要發佈給終端使用者的內容。

我們的 package.json module 進入點指向 ES2017 格式 (亦即非套件組合) 的個別程式庫檔案。這可啟用樹狀結構搖動,並讓開發人員更妥善地掌控下游轉譯。

我們確實提供一些替代格式作為預先編譯的套件組合,以支援舊版瀏覽器和其他模組系統。這些格式遵循下表所述的命名慣例,您可以從 JsDelivr 和 Unpkg 等熱門 CDN 載入這些格式。

檔案名稱 模組格式 語言版本
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

* [套件] 是指主要 tf.js 套件的子套件名稱,例如 core/converter/layers。[min] 說明我們在何處提供已縮小化的檔案以及未縮小化的檔案。

** 我們的 package.json main 進入點指向此檔案。

*** 我們的 package.json module 進入點指向此檔案。

如果您透過 npm 使用 tensorflow.js,而且您使用的是套件組合器,您可能需要調整套件組合器組態,以確保它可以取用 ES2017 模組,或將其指向 out package.json 中的另一個項目。

@tensorflow/tfjs-core 預設更精簡

為了改善 樹狀結構搖動,我們不再預設在 @tensorflow/tfjs-core 中的張量上加入鏈結/流暢 API。我們建議直接使用運算 (ops) 以取得最小的套件組合。我們提供匯入 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,以取得關於如何加入這些後端的指示。