TensorFlow.js 3.0 へのアップグレード

TensorFlow.js 3.0 での変更点

リリースノートはここから入手できます。ユーザー向けの注目すべき機能には次のようなものがあります。

カスタムモジュール

サイズが最適化されたブラウザー バンドルの生成をサポートするカスタム tfjs モジュールの作成のサポートを提供します。ユーザーに配布する JavaScript を減らします。これについて詳しくは、このチュートリアルを参照してください

この機能はブラウザでの展開を対象としていますが、この機能を有効にすると、以下で説明するいくつかの変更が行われます。

ES2017 コード

いくつかのプリコンパイル バンドルに加えて、現在コードを NPM に出荷する主な方法は、 ES2017 構文を使用したES モジュールとしてです。これにより、開発者は最新の 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
インデックス.js*** ESM ES2017

* [パッケージ] は、メインの 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 を含めなくなりました。操作 (ops) を直接使用して最小のバンドルを取得することをお勧めします。インポートimport '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';を提供します。チェーン API を復元します。

また、デフォルトではカーネルのグラデーションを登録しなくなりました。勾配/トレーニングのサポートが必要な場合はimport '@tensorflow/tfjs-core/dist/register_all_gradients';

コードの再編成、カーネルお​​よび勾配レジストリ

演算とカーネルの提供と、カスタム演算、カーネル、グラデーションの実装を容易にするために、コードを再編成しました。詳細については、このガイドを参照してください

重大な変更

重大な変更の完全なリストはここにありますが、これには、mulStrict や addStrict などのすべての *Strict 演算の削除が含まれています。

2.x からのコードのアップグレード

@tensorflow/tfjs のユーザー

ここにリストされている重大な変更に対処します ( https://github.com/tensorflow/tfjs/releases )。

@tensorflow/tfjs-core のユーザー

ここ ( https://github.com/tensorflow/tfjs/releases ) にリストされている重大な変更に対処し、次の操作を実行します。

チェーンされた op オーグメンタを追加するか、op を直接使用します

それよりも

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';

あるいは、op を直接使用することもできます (ここでも名前付きインポートを使用できます)

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を参照してください。