Mise à niveau vers TensorFlow.js 3.0

Ce qui a changé dans TensorFlow.js 3.0

Les notes de version sont disponibles ici . Quelques fonctionnalités notables destinées aux utilisateurs incluent :

Modules personnalisés

Nous fournissons un support pour la création de modules tfjs personnalisés afin de prendre en charge la production d'ensembles de navigateurs de taille optimisée. Expédiez moins de JavaScript à vos utilisateurs. Pour en savoir plus à ce sujet, consultez ce tutoriel .

Cette fonctionnalité est destinée au déploiement dans le navigateur, mais l'activation de cette fonctionnalité motive certains des changements décrits ci-dessous.

Code ES2017

En plus de certains bundles de précompilation, la principale façon dont nous expédions désormais notre code à NPM est sous forme de modules ES avec la syntaxe ES2017 . Cela permet aux développeurs de profiter des fonctionnalités JavaScript modernes et d'avoir un meilleur contrôle sur ce qu'ils envoient à leurs utilisateurs finaux.

Notre module package.json point d'entrée vers des fichiers de bibliothèque individuels au format ES2017 (c'est-à-dire pas un bundle). Cela permet de secouer les arbres et de mieux contrôler le développeur sur la transpilation en aval.

Nous proposons quelques formats alternatifs sous forme d'ensembles précompilés pour prendre en charge les anciens navigateurs et autres systèmes de modules. Ils suivent la convention de dénomination décrite dans le tableau ci-dessous et vous pouvez les charger à partir de CDN populaires tels que JsDelivr et Unpkg.

Nom de fichier Format des modules Version linguistique
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 (fichier plat unique) ES2017
index.js*** MES ES2017

* [package] fait référence à des noms tels que core/converter/layers pour les sous-packages du package tf.js principal. [min] décrit où nous fournissons des fichiers minifiés en plus des fichiers non minifiés.

** Notre entrée main package.json pointe vers ce fichier.

*** Notre entrée module package.json pointe vers ce fichier.

Si vous utilisez tensorflow.js via npm et que vous utilisez bundler, vous devrez peut-être ajuster la configuration de votre bundler pour vous assurer qu'il peut soit consommer les modules ES2017, soit le pointer vers une autre des entrées de notre package.json.

@tensorflow/tfjs-core est plus mince par défaut

Pour permettre un meilleur tremblement d'arbre, nous n'incluons plus l'API de chaînage/fluent sur les tenseurs par défaut dans @tensorflow/tfjs-core. Nous vous recommandons d'utiliser directement les opérations (ops) pour obtenir le plus petit bundle. Nous fournissons un import import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops'; qui restaure l'API de chaînage.

Nous n'enregistrons plus non plus les dégradés pour les noyaux par défaut. Si vous souhaitez une prise en charge du dégradé/de la formation, vous pouvez import '@tensorflow/tfjs-core/dist/register_all_gradients';

Réorganisation du code, registres de noyau et de dégradé

Nous avons réorganisé notre code pour faciliter à la fois la contribution aux opérations et aux noyaux, ainsi que la mise en œuvre d'opérations, de noyaux et de dégradés personnalisés. Consultez ce guide pour plus d'informations .

Changements révolutionnaires

Une liste complète des modifications importantes peut être trouvée ici , mais elles incluent la suppression de toutes les opérations *Strict comme mulStrict ou addStrict.

Mise à niveau du code à partir de 2.x

Utilisateurs de @tensorflow/tfjs

Corrigez toutes les modifications importantes répertoriées ici ( https://github.com/tensorflow/tfjs/releases )

Utilisateurs de @tensorflow/tfjs-core

Corrigez toutes les modifications importantes répertoriées ici ( https://github.com/tensorflow/tfjs/releases ), puis procédez comme suit :

Ajoutez des augmentateurs d'opérations chaînés ou utilisez les opérations directement

Plutôt que

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.

Tu as besoin de faire

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();

Vous pouvez également importer toutes les API de chaînage/fluent avec l'importation suivante

import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops';

Alternativement, vous pouvez utiliser l'op directement (vous pouvez également utiliser les importations nommées ici)

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

Importer le code d'initialisation

Si vous utilisez exclusivement des importations nommées (au lieu de import * as ... ), vous devrez peut-être dans certains cas faire

import @tensorflow/tfjs-core

près du haut de votre programme, cela empêche les arboricoles agressifs de supprimer toute initialisation nécessaire.

Mise à niveau du code à partir de 1.x

Utilisateurs de @tensorflow/tfjs

Corrigez toutes les modifications importantes répertoriées ici . Suivez ensuite les instructions pour la mise à niveau depuis 2.x

Utilisateurs de @tensorflow/tfjs-core

Corrigez toutes les modifications importantes répertoriées ici , sélectionnez un backend comme décrit ci-dessous, puis suivez les étapes de mise à niveau à partir de 2.x.

Sélection d'un ou plusieurs backends

Dans TensorFlow.js 2.0, nous avons supprimé les backends CPU et Webgl dans leurs propres packages. Voir @tensorflow/tfjs-backend-cpu , @tensorflow/tfjs-backend-webgl , @tensorflow/tfjs-backend-wasm , @tensorflow/tfjs-backend-webgpu pour obtenir des instructions sur la façon d'inclure ces backends.