TensorFlow.js en Node.js

Esta guía describe los paquetes de TensorFlow.js y las API disponibles para Node.js.

Para aprender cómo instalar TensorFlow.js en Node.js, consulte el tutorial de configuración . Para obtener información adicional sobre la instalación y el soporte, consulte el repositorio TensorFlow.js para Node.js.

CPU TensorFlow

El paquete de CPU TensorFlow se puede importar de la siguiente manera:

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

Cuando importa TensorFlow.js desde este paquete, obtiene un módulo que se acelera mediante el binario TensorFlow C y se ejecuta en la CPU. TensorFlow en la CPU utiliza aceleración de hardware para optimizar el cálculo de álgebra lineal.

Este paquete funciona en plataformas Linux, Windows y macOS donde se admite TensorFlow.

GPU TensorFlow

El paquete TensorFlow GPU se puede importar de la siguiente manera:

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

Al igual que el paquete de CPU, el módulo se acelera mediante el binario TensorFlow C. Pero el paquete GPU ejecuta operaciones tensoriales en la GPU con CUDA, por lo que sólo está disponible en Linux. Esta vinculación puede ser al menos un orden de magnitud más rápida que las otras opciones de vinculación.

TensorFlow para JavaScript puro

También hay una versión de TensorFlow.js que ejecuta JavaScript puro en la CPU. Se puede importar de la siguiente manera:

import * as tf from '@tensorflow/tfjs'

Este paquete es el mismo paquete que usarías en el navegador. En este paquete, las operaciones se ejecutan en JavaScript básico en la CPU. Este paquete es mucho más pequeño que los demás porque no necesita el binario de TensorFlow, pero también es mucho más lento.

Debido a que este paquete no depende de TensorFlow, se puede usar en más dispositivos que admitan Node.js. No se limita a las plataformas Linux, Windows y macOS que admiten TensorFlow.

Consideraciones de producción

Los enlaces de Node.js proporcionan un backend para TensorFlow.js que implementa operaciones de forma sincrónica. Esto significa que, por ejemplo, cuando llamas a una operación como tf.matMul(a, b) , bloqueará el hilo principal hasta que se complete la operación.

Por este motivo, los enlaces son adecuados para scripts y tareas fuera de línea. Si desea utilizar los enlaces de Node.js en una aplicación de producción como un servidor web, debe configurar una cola de trabajos o configurar subprocesos de trabajo para que su código TensorFlow.js no bloquee el subproceso principal.

API

Cuando importa el paquete como tf usando cualquiera de las opciones anteriores, todos los símbolos normales de TensorFlow.js aparecen en el módulo importado.

navegador tf

Las API en el espacio de nombres tf.browser.* no se pueden utilizar en Node.js porque dependen de API específicas del navegador. Para obtener una lista de las API tf.browser , consulte Navegador .

tf.nodo

Los dos paquetes de Node.js también proporcionan un espacio de nombres, tf.node , que contiene API específicas de Node.js (por ejemplo, TensorBoard).

A continuación se muestra un ejemplo de exportación de resúmenes a TensorBoard en 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();