TensorFlow.js em Node.js

Este guia descreve os pacotes e APIs TensorFlow.js disponíveis para Node.js.

Para saber como instalar o TensorFlow.js no Node.js, consulte o tutorial de configuração . Para obter informações adicionais sobre instalação e suporte, consulte o repositório TensorFlow.js para Node.js.

CPU TensorFlow

O pacote de CPU TensorFlow pode ser importado da seguinte maneira:

import * as tf from '@tensorflow/tfjs-node'

Ao importar o TensorFlow.js deste pacote, você obtém um módulo que é acelerado pelo binário TensorFlow C e executado na CPU. O TensorFlow na CPU usa aceleração de hardware para otimizar o cálculo de álgebra linear.

Este pacote funciona em plataformas Linux, Windows e macOS onde o TensorFlow é compatível.

GPU TensorFlow

O pacote TensorFlow GPU pode ser importado da seguinte maneira:

import * as tf from '@tensorflow/tfjs-node-gpu'

Assim como o pacote de CPU, o módulo é acelerado pelo binário TensorFlow C. Mas o pacote GPU executa operações de tensor na GPU com CUDA, portanto está disponível apenas no Linux. Essa ligação pode ser pelo menos uma ordem de magnitude mais rápida do que as outras opções de ligação.

TensorFlow para JavaScript puro

Há também uma versão do TensorFlow.js que executa JavaScript puro na CPU. Pode ser importado da seguinte forma:

import * as tf from '@tensorflow/tfjs'

Este pacote é o mesmo pacote que você usaria no navegador. Neste pacote, as operações são executadas em JavaScript vanilla na CPU. Este pacote é muito menor que os outros porque não precisa do binário TensorFlow, mas também é muito mais lento.

Como este pacote não depende do TensorFlow, ele pode ser usado em mais dispositivos compatíveis com Node.js. Não se limita às plataformas Linux, Windows e macOS compatíveis com TensorFlow.

Considerações de produção

As vinculações do Node.js fornecem um back-end para TensorFlow.js que implementa operações de forma síncrona. Isso significa que, por exemplo, quando você chama uma operação como tf.matMul(a, b) , ela bloqueará o thread principal até que a operação seja concluída.

Por esse motivo, as ligações são adequadas para scripts e tarefas offline. Se quiser usar as vinculações do Node.js em um aplicativo de produção, como um servidor Web, você deverá configurar uma fila de trabalhos ou threads de trabalho para que o código do TensorFlow.js não bloqueie o thread principal.

APIs

Quando você importa o pacote como tf usando qualquer uma das opções acima, todos os símbolos normais do TensorFlow.js aparecem no módulo importado.

tf.browser

As APIs no namespace tf.browser.* não podem ser usadas no Node.js porque dependem de APIs específicas do navegador. Para obter uma lista das APIs tf.browser , consulte Navegador .

tf.node

Os dois pacotes Node.js também fornecem um namespace, tf.node , que contém APIs específicas do Node.js (por exemplo, TensorBoard).

Aqui está um exemplo de exportação de resumos para TensorBoard em Node.js:

const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [200] }));
model.compile({
  loss: 'meanSquaredError',
  optimizer: 'sgd',
  metrics: ['MAE']
});

// Generate some random fake data for demo purposes.
const xs = tf.randomUniform([10000, 200]);
const ys = tf.randomUniform([10000, 1]);
const valXs = tf.randomUniform([1000, 200]);
const valYs = tf.randomUniform([1000, 1]);

// Start model training process.
async function train() {
  await model.fit(xs, ys, {
    epochs: 100,
    validationData: [valXs, valYs],
    // Add the tensorBoard callback here.
    callbacks: tf.node.tensorBoard('/tmp/fit_logs_1')
  });
}
train();