本指南介绍了适用于 Node.js 的 TensorFlow.js 包和 API。
要了解如何在 Node.js 中安装 TensorFlow.js,请参阅设置教程。有关安装和支持的更多信息,请参阅TensorFlow.js for Node.js 存储库。
TensorFlow CPU
TensorFlow CPU 包可以按如下方式导入
import * as tf from '@tensorflow/tfjs-node'
从该包导入 TensorFlow.js 时,您将获得一个由 TensorFlow C 二进制文件加速并在 CPU 上运行的模块。CPU 上的 TensorFlow 使用硬件加速来优化线性代数计算。
此包适用于支持 TensorFlow 的 Linux、Windows 和 macOS 平台。
TensorFlow GPU
TensorFlow GPU 包可以按如下方式导入
import * as tf from '@tensorflow/tfjs-node-gpu'
与 CPU 包一样,该模块由 TensorFlow C 二进制文件加速。但 GPU 包使用 CUDA 在 GPU 上运行张量操作,因此它仅在 Linux 上可用。此绑定至少比其他绑定选项快一个数量级。
适用于纯 JavaScript 的 TensorFlow
TensorFlow.js 还有一个在 CPU 上运行纯 JavaScript 的版本。可以按如下方式导入
import * as tf from '@tensorflow/tfjs'
此包与您在浏览器中使用的包相同。在此包中,操作在 CPU 上的普通 JavaScript 中运行。此包比其他包小得多,因为它不需要 TensorFlow 二进制文件,但它也慢得多。
由于此包不依赖于 TensorFlow,因此它可以在支持 Node.js 的更多设备中使用。它不限于支持 TensorFlow 的 Linux、Windows 和 macOS 平台。
生产注意事项
Node.js 绑定为 TensorFlow.js 提供了一个后端,该后端以同步方式实现操作。这意味着,例如,当您调用 tf.matMul(a, b)
之类的操作时,它将阻塞主线程,直到操作完成。
因此,绑定非常适合脚本和离线任务。如果您想在 Web 服务器等生产应用程序中使用 Node.js 绑定,则应设置作业队列或设置工作线程,以使您的 TensorFlow.js 代码不会阻塞主线程。
API
当您使用上述任何选项将包导入为 tf
时,所有正常的 TensorFlow.js 符号都将出现在导入的模块上。
tf.browser
tf.browser.*
命名空间中的 API 在 Node.js 中不可用,因为它们依赖于特定于浏览器的 API。有关 tf.browser
API 的列表,请参阅浏览器。
tf.node
两个 Node.js 包还提供了一个命名空间 tf.node
,其中包含特定于 Node.js 的 API(例如,TensorBoard)。
以下是在 Node.js 中将摘要导出到 TensorBoard 的示例
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();