Como fazer upgrade 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 dar suporte à produção de pacotes de navegador com tamanho otimizado. Envie menos JavaScript para seus usuários. Para saber mais sobre isso, veja este tutorial .

Esse recurso é voltado para implantação no navegador, porém habilitar esse recurso motiva algumas das alterações descritas abaixo.

Código ES2017

Além de alguns pacotes pré-compilados, a principal maneira de enviarmos agora 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 eles enviam para seus usuários finais.

Nosso ponto de entrada do module package.json 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 a jusante.

Nós fornecemos alguns formatos alternativos como pacotes pré-compilados para suportar 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[-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 (arquivo simples simples) ES2017
index.js*** ESM 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 do module package.json aponta para este arquivo.

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

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

Para permitir uma melhor vibração de á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 importação 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 tanto a contribuição de operações e kernels quanto a implementação de operações, kernels e gradientes personalizados. Consulte este guia para obter mais informações .

Mudanças de última hora

Uma lista completa de mudanças 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 de 2.x

Usuários de @tensorflow/tfjs

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

Usuários de @tensorflow/tfjs-core

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

Adicione amplificadores operacionais encadeados ou use operações diretamente

Ao invés 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 o op 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 pode ser necessário fazer

import @tensorflow/tfjs-core

próximo ao topo do seu programa, isso evita que os agitadores de árvore agressivos abandonem qualquer inicialização necessária.

Atualizando o código de 1.x

Usuários de @tensorflow/tfjs

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

Usuários de @tensorflow/tfjs-core

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

Selecionando um back-end

No TensorFlow.js 2.0, removemos os backends 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.