TensorFlow.js in Node

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, il modulo che ottieni verrà accelerato dal binario TensorFlow C ed eseguito sulla CPU. TensorFlow sulla CPU utilizza l'accelerazione hardware per accelerare il calcolo dell'algebra lineare sotto il cofano.

Questo pacchetto funzionerà su piattaforme Linux, Windows e Mac 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 che ottieni sarà accelerato dal binario TensorFlow C, tuttavia eseguirà operazioni tensori sulla GPU con CUDA e quindi solo su Linux. Questa associazione può essere almeno un ordine di grandezza più veloce delle altre opzioni di associazione.

CPU Vanilla

La versione di TensorFlow.js in esecuzione con le operazioni della CPU Vanilla può essere importata come segue:

import * as tf from '@tensorflow/tfjs'

Questo pacchetto è lo stesso di quello che useresti nel browser. In questo pacchetto, le operazioni vengono eseguite in JavaScript vanigliato sulla CPU. Questo pacchetto è molto più piccolo degli altri perché non necessita del binario TensorFlow, tuttavia è molto più lento.

Poiché questo pacchetto non si basa su TensorFlow, può essere utilizzato in più dispositivi che supportano Node.js oltre a Linux, Windows e Mac.

Considerazioni sulla produzione

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

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

API

Una volta importato il pacchetto come tf in una delle opzioni sopra, tutti i normali simboli TensorFlow.js appariranno sul modulo importato.

tf.browser

Nel normale pacchetto di TensorFlow.js, i simboli nel tf.browser.* Namespace non sarà utilizzabile in Node.js come usano le API del browser-specifici.

Attualmente, questi sono:

  • tf.browser.fromPixels
  • tf.browser.toPixels

tf.node

I due pacchetti Node.JS forniscono anche un namespace, tf.node , che contengono API nodo-specifici.

TensorBoard è un notevole esempio di API specifiche di Node.js.

Un esempio di esportazione dei 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 purpose.
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();