Atualizando para o TensorFlow.js 3.0

O que mudou no TensorFlow.js 3.0

As notas de lançamento estão disponíveis aqui . Alguns recursos notáveis ​​voltados para o usuário incluem:

Módulos personalizados

Fornecemos suporte para a criação de módulos tfjs personalizados para suportar a produção de pacotes de navegador com tamanho otimizado. Envie menos JavaScript para seus usuários. Para saber mais sobre isso, consulte este tutorial .

Este recurso é voltado para implantação no navegador, porém a ativação desse recurso motiva algumas das alterações descritas abaixo.

Código ES2017

Além de alguns pacotes de pré-compilação, a principal maneira pela qual agora enviamos nosso código para o NPM é como Módulos ES com sintaxe ES2017 . Isso permite que os desenvolvedores aproveitem os recursos modernos do JavaScript e tenham maior controle sobre o que enviam aos usuários finais.

Nosso module package.json aponta para arquivos de biblioteca individuais no formato ES2017 (ou seja, não um pacote). Isso permite a agitação da árvore e maior controle do desenvolvedor sobre a transpilação downstream.

Fornecemos alguns formatos alternativos como pacotes pré-compilados para oferecer suporte a navegadores legados e outros sistemas de módulos. Eles seguem a convenção de nomenclatura descrita na tabela abaixo e você pode carregá-los de CDNs populares como JsDelivr e Unpkg.

Nome do arquivo Formato do Módulo Versão do idioma
tf[-pacote].[min].js* UMD ES5
tf[-pacote].es2017.[min].js UMD ES2017
tf[-pacote].node.js** CommonJS ES5
tf[-pacote].es2017.fesm.[min].js ESM (arquivo simples único) ES2017
índice.js*** MEE ES2017

* [pacote] refere-se a nomes como core/converter/layers para subpacotes do pacote tf.js principal. [min] descreve onde fornecemos arquivos minificados, além de arquivos não minificados.

** Nossa entrada main package.json aponta para este arquivo.

*** Nossa entrada module package.json aponta para este arquivo.

Se você estiver usando tensorflow.js via npm e estiver usando o bundler, pode ser necessário ajustar a configuração do seu bundler para garantir que ele possa consumir os módulos ES2017 ou apontá-lo para outra das entradas em nosso package.json.

@tensorflow/tfjs-core é mais fino por padrão

Para permitir uma melhor agitação da árvore, não incluímos mais a API de encadeamento/fluente em tensores por padrão em @tensorflow/tfjs-core. Recomendamos usar operações (ops) diretamente para obter o menor pacote. Fornecemos uma import '@tensorflow/tfjs-core/dist/public/chained_ops/register_all_chained_ops'; que restaura a API de encadeamento.

Também não registramos mais gradientes para kernels por padrão. Se você deseja suporte a gradiente/treinamento, você pode import '@tensorflow/tfjs-core/dist/register_all_gradients';

Reorganização de código, registros de kernel e gradiente

Reorganizamos nosso código para facilitar a contribuição de operações e kernels, bem como a implementação de operações, kernels e gradientes personalizados. Consulte este guia para obter mais informações .

Quebrando mudanças

Uma lista completa de alterações importantes pode ser encontrada aqui , mas elas incluem a remoção de todas as operações *Strict, como mulStrict ou addStrict.

Atualizando o código da versão 2.x

Usuários de @tensorflow/tfjs

Resolva quaisquer alterações significativas listadas aqui ( https://github.com/tensorflow/tfjs/releases )

Usuários de @tensorflow/tfjs-core

Resolva quaisquer alterações significativas listadas aqui ( https://github.com/tensorflow/tfjs/releases ) e faça o seguinte:

Adicione ampliadores de operações encadeados ou use operações diretamente

Em vez de

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.

Você precisa fazer

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

Você também pode importar toda a API de encadeamento/fluente com a seguinte importação

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

Alternativamente, você pode usar a operação diretamente (você também pode usar importações nomeadas aqui)

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

Importar código de inicialização

Se você estiver usando exclusivamente importações nomeadas (em vez de import * as ... ), em alguns casos poderá ser necessário fazer

import @tensorflow/tfjs-core

próximo ao topo do seu programa, isso evita que tree-shakers agressivos destruam qualquer inicialização necessária.

Atualizando o código de 1.x

Usuários de @tensorflow/tfjs

Aborde quaisquer alterações significativas listadas aqui . Em seguida, siga as instruções para atualizar do 2.x

Usuários de @tensorflow/tfjs-core

Resolva quaisquer alterações significativas listadas aqui , selecione um back-end conforme descrito abaixo e siga as etapas para atualizar do 2.x

Selecionando um(s) back-end(s)

No TensorFlow.js 2.0, removemos os back-ends de CPU e webgl em seus próprios pacotes. Consulte @tensorflow/tfjs-backend-cpu , @tensorflow/tfjs-backend-webgl , @tensorflow/tfjs-backend-wasm , @tensorflow/tfjs-backend-webgpu para obter instruções sobre como incluir esses back-ends.