TensorFlow.js in Node.js

Questa guida descrive i pacchetti TensorFlow.js e le API disponibili per Node.js.

Per sapere come installare TensorFlow.js in Node.js, consulta il tutorial di configurazione . Per ulteriori informazioni sull'installazione e sul supporto, consulta il repository TensorFlow.js per Node.js.

CPU TensorFlow

Il pacchetto CPU TensorFlow può essere importato come segue:

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

Quando importi TensorFlow.js da questo pacchetto, ottieni un modulo che viene accelerato dal binario TensorFlow C e viene eseguito sulla CPU. TensorFlow sulla CPU utilizza l'accelerazione hardware per ottimizzare il calcolo dell'algebra lineare.

Questo pacchetto funziona su piattaforme Linux, Windows e macOS in cui è supportato TensorFlow.

GPU TensorFlow

Il pacchetto GPU TensorFlow può essere importato come segue:

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

Come il pacchetto CPU, il modulo viene accelerato dal binario TensorFlow C. Ma il pacchetto GPU esegue operazioni tensore sulla GPU con CUDA, quindi è disponibile solo su Linux. Questa associazione può essere almeno un ordine di grandezza più veloce rispetto alle altre opzioni di associazione.

TensorFlow per JavaScript puro

Esiste anche una versione di TensorFlow.js che esegue JavaScript puro sulla CPU. Può essere importato come segue:

import * as tf from '@tensorflow/tfjs'

Questo pacchetto è lo stesso pacchetto che utilizzeresti nel browser. In questo pacchetto, le operazioni vengono eseguite in JavaScript Vanilla sulla CPU. Questo pacchetto è molto più piccolo degli altri perché non necessita del binario TensorFlow, ma è anche molto più lento.

Poiché questo pacchetto non si basa su TensorFlow, può essere utilizzato in più dispositivi che supportano Node.js. Non è limitato alle piattaforme Linux, Windows e macOS che supportano TensorFlow.

Considerazioni sulla produzione

I collegamenti Node.js forniscono un backend per TensorFlow.js che implementa le operazioni in modo sincrono. Ciò significa che, ad esempio, quando chiami un'operazione come tf.matMul(a, b) , bloccherà il thread principale fino al completamento dell'operazione.

Per questo motivo i collegamenti sono particolarmente adatti per script e attività offline. Se desideri utilizzare i collegamenti Node.js in un'applicazione di produzione come un server Web, devi impostare una coda di processi o impostare thread di lavoro in modo che il codice TensorFlow.js non blocchi il thread principale.

API

Quando importi il ​​pacchetto come tf utilizzando una delle opzioni precedenti, tutti i normali simboli TensorFlow.js vengono visualizzati sul modulo importato.

tf.browser

Le API nello spazio dei nomi tf.browser.* non sono utilizzabili in Node.js perché dipendono da API specifiche del browser. Per un elenco delle API tf.browser , consulta Browser .

tf.node

I due pacchetti Node.js forniscono anche uno spazio dei nomi, tf.node , che contiene API specifiche di Node.js (ad esempio, TensorBoard).

Ecco un esempio di esportazione di riepiloghi in TensorBoard in 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();