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 '@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 dois 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.