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.