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.