在 Ubuntu 上使用 Node.js 进行机器学习的实践指南
一 环境准备
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
node -v
npm -v
mkdir ml-node && cd ml-node
npm init -y
二 库选型与安装
| 库 | 适用场景 | 安装命令 | 备注 |
|---|---|---|---|
| @tensorflow/tfjs-node | 图像、NLP、通用深度学习 | npm i @tensorflow/tfjs-node |
CPU 加速;需 GPU 时用 @tensorflow/tfjs-node-gpu 并配置 CUDA/cuDNN |
| brain.js | 入门神经网络、小型分类/回归 | npm i brain.js |
API 简洁,适合快速原型 |
| ML-JS | 传统机器学习算法集合 | npm i ml |
含 SVM/KNN/决策树/回归/聚类 等 |
| ConvNetJS | 教学/小模型神经网络 | npm i convnetjs |
可在浏览器与 Node 使用 |
| apparatus | 轻量聚类/数值算法 | npm i apparatus |
提供 KMeans 等基础算法 |
三 快速上手示例
// index.js
const tf = require('@tensorflow/tfjs-node');
(async () => {
const xs = tf.tensor2d([1, 2, 3, 4], [4, 1]);
const ys = tf.tensor2d([1, 3, 5, 7], [4, 1]);
const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [1] }));
model.compile({ loss: 'meanSquaredError', optimizer: 'sgd' });
await model.fit(xs, ys, { epochs: 50 });
const pred = model.predict(tf.tensor2d([5], [1, 1]));
pred.print(); // 期望接近 9
})();
运行:node index.js
// xor.js
const brain = require('brain.js');
const net = new brain.NeuralNetwork({ hiddenLayers: [3], activation: 'sigmoid' });
const trainData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
net.train(trainData, { iterations: 2000 });
console.log(net.run([1, 0])); // 接近 1
运行:node xor.js
// csv-demo.js
const tf = require('@tensorflow/tfjs-node');
const { CSVDataset } = require('@tensorflow/tfjs-data/dist/datasets/csv_dataset');
(async () => {
const csvUrl = 'http://127.0.0.1:8080/data.csv'; // 本地或远程 CSV
const dataset = tf.data.csv(csvUrl);
const samples = await dataset.take(5).toArray();
console.log(samples);
})();
提示:CSV 读取返回 Promise,需 await;可用本地静态服务器提供 CSV 文件。四 GPU 加速与性能建议
npm i @tensorflow/tfjs-node-gpu
await model.save('file://./model');
const loaded = await tf.loadLayersModel('file://./model/model.json');
五 数据管道与实验环境扩展