TensorFlow.js 简介 #

什么是机器学习? #

机器学习是人工智能的一个分支,它使计算机能够从数据中学习并做出决策或预测,而无需显式编程。

text
┌─────────────────┐
│     训练数据     │
│   图片、文本     │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   机器学习模型   │
│   学习模式       │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│     预测结果     │
│   分类、回归     │
└─────────────────┘

什么是 TensorFlow.js? #

TensorFlow.js 是一个用于在 JavaScript 中进行机器学习的开源库。它允许你在浏览器端或 Node.js 环境中构建、训练和运行机器学习模型。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                       TensorFlow.js                          │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  浏览器运行   │  │  Node.js    │  │  预训练模型  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  张量运算    │  │  神经网络    │  │  GPU 加速   │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

TensorFlow.js 的历史 #

发展历程 #

text
2017年 ─── deeplearn.js 发布
    │
    │      Google Brain 团队
    │      WebGL 加速
    │      浏览器端深度学习
    │
2018年 ─── TensorFlow.js 诞生
    │
    │      合并 deeplearn.js
    │      统一 API 设计
    │      Node.js 支持
    │
2019年 ─── 功能增强
    │
    │      更多预训练模型
    │      模型转换工具
    │      性能优化
    │
2020年 ─── 生态扩展
    │
    │      TensorFlow.js Data
    │      模型优化工具
    │      WebAssembly 支持
    │
2021年 ─── 持续进化
    │
    │      更多层类型
    │      改进的训练 API
    │      更好的调试工具
    │
2023年 ─── 现代化
    │
    │      ES Modules 支持
    │      TypeScript 改进
    │      性能优化
    │
至今   ─── 行业标准
    │
    │      最流行的 JS ML 库
    │      丰富的生态系统

里程碑版本 #

版本 时间 重要特性
0.x 2017 deeplearn.js 初始发布
1.0 2019 正式版,稳定 API
2.0 2020 自定义层、模型优化
3.0 2021 改进的训练循环
4.0 2023 现代化架构

为什么选择 TensorFlow.js? #

传统机器学习的局限 #

在使用 TensorFlow.js 之前,前端机器学习面临以下问题:

javascript
// 传统方案:需要后端 API
async function predict(input) {
  const response = await fetch('/api/predict', {
    method: 'POST',
    body: JSON.stringify(input)
  });
  return response.json();
}

TensorFlow.js 的解决方案 #

javascript
// TensorFlow.js:浏览器端直接运行
const model = await tf.loadLayersModel('model.json');
const prediction = model.predict(tf.tensor(input));
prediction.data().then(data => console.log(data));

TensorFlow.js 的核心特点 #

1. 跨平台运行 #

TensorFlow.js 可以在多种环境中运行:

javascript
// 浏览器环境
import * as tf from '@tensorflow/tfjs';

// Node.js 环境
const tf = require('@tensorflow/tfjs-node');

// 使用 WebGL 加速
const tensor = tf.tensor([1, 2, 3]);

2. 完整的机器学习功能 #

支持从数据预处理到模型部署的完整流程:

javascript
const model = tf.sequential();
model.add(tf.layers.dense({ units: 10, inputShape: [5] }));
model.add(tf.layers.dense({ units: 1 }));

model.compile({
  optimizer: 'adam',
  loss: 'meanSquaredError'
});

await model.fit(xs, ys, { epochs: 10 });

3. GPU 加速 #

利用 WebGL 在浏览器中实现 GPU 加速:

text
┌─────────────────────────────────────────────────────────────┐
│                    TensorFlow.js 后端                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │   WebGL     │  │  WebAssembly │  │    CPU     │         │
│  │   (GPU)     │  │   (WASM)     │  │   (回退)   │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│                                                             │
│  性能优先级:WebGL > WASM > CPU                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. 丰富的预训练模型 #

提供多种开箱即用的预训练模型:

javascript
// 图像分类
const model = await mobilenet.load();
const predictions = await model.classify(img);

// 目标检测
const model = await cocoSsd.load();
const predictions = await model.detect(img);

// 姿态估计
const model = await poseDetection.createDetector(model);
const poses = await model.estimatePoses(img);

5. 模型转换 #

支持从 Python TensorFlow 转换模型:

bash
# 将 Keras 模型转换为 TensorFlow.js 格式
tensorflowjs_converter --input_format keras model.h5 model_js/

TensorFlow.js 与其他框架对比 #

TensorFlow.js vs TensorFlow (Python) #

特性 TensorFlow.js TensorFlow (Python)
运行环境 浏览器/Node.js Python 环境
学习曲线 中等 陡峭
功能完整度 极高
GPU 支持 WebGL CUDA
部署便利性 极高 中等
社区规模 中等 极大

TensorFlow.js vs Brain.js #

特性 TensorFlow.js Brain.js
功能完整度
预训练模型 丰富
GPU 加速 WebGL 有限
学习曲线 中等 平缓
适用场景 专业项目 简单任务

TensorFlow.js vs ONNX.js #

特性 TensorFlow.js ONNX.js
模型来源 TensorFlow 多框架
训练能力 完整 仅推理
社区支持 中等
浏览器支持 全部 现代

TensorFlow.js 的应用场景 #

1. 图像分类 #

javascript
import * as mobilenet from '@tensorflow-models/mobilenet';

const model = await mobilenet.load();
const img = document.getElementById('image');
const predictions = await model.classify(img);
console.log(predictions);

2. 目标检测 #

javascript
import * as cocoSsd from '@tensorflow-models/coco-ssd';

const model = await cocoSsd.load();
const img = document.getElementById('image');
const predictions = await model.detect(img);
predictions.forEach(p => {
  console.log(`${p.class}: ${p.score}`);
});

3. 文本情感分析 #

javascript
import * as toxicity from '@tensorflow-models/toxicity';

const model = await toxicity.load();
const sentences = ['This is a great day!'];
const predictions = await model.classify(sentences);

4. 语音识别 #

javascript
import * as speechCommands from '@tensorflow-models/speech-commands';

const recognizer = speechCommands.create('BROWSER_FFT');
await recognizer.ensureModelLoaded();
const result = await recognizer.listen();

5. 实时姿态估计 #

javascript
import * as poseDetection from '@tensorflow-models/pose-detection';

const detector = await poseDetection.createDetector(
  poseDetection.SupportedModels.MoveNet
);
const poses = await detector.estimatePoses(video);
poses.forEach(pose => {
  pose.keypoints.forEach(keypoint => {
    console.log(`${keypoint.name}: ${keypoint.score}`);
  });
});

TensorFlow.js 的核心概念 #

张量(Tensor) #

javascript
const scalar = tf.scalar(5);
const vector = tf.tensor1d([1, 2, 3]);
const matrix = tf.tensor2d([[1, 2], [3, 4]]);
const tensor3d = tf.tensor3d([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]);

变量(Variable) #

javascript
const initial = tf.zeros([3, 3]);
const variable = tf.variable(initial);
variable.assign(tf.ones([3, 3]));

操作(Operations) #

javascript
const a = tf.tensor([1, 2, 3]);
const b = tf.tensor([4, 5, 6]);

const sum = a.add(b);
const product = a.mul(b);
const dot = a.dot(b);

模型(Model) #

javascript
const model = tf.sequential();
model.add(tf.layers.dense({ units: 1, inputShape: [1] }));
model.compile({ optimizer: 'sgd', loss: 'meanSquaredError' });

TensorFlow.js 的架构设计 #

模块化结构 #

text
TensorFlow.js
├── tfjs-core        - 核心张量操作
├── tfjs-layers      - Keras 风格的层 API
├── tfjs-converter   - 模型转换工具
├── tfjs-data        - 数据加载工具
├── tfjs-node        - Node.js 绑定
└── tfjs-backend     - 后端实现
    ├── webgl        - WebGL 后端
    ├── wasm         - WebAssembly 后端
    └── cpu          - CPU 后端

数据流 #

text
┌─────────────────────────────────────────────────────────────┐
│                    TensorFlow.js 数据流                       │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌─────────────┐                                            │
│  │   输入数据   │                                            │
│  │  (张量)     │                                            │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  ┌─────────────┐                                            │
│  │   模型层     │                                            │
│  │  (Layers)   │                                            │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  ┌─────────────┐                                            │
│  │   损失函数   │                                            │
│  │  (Loss)     │                                            │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  ┌─────────────┐                                            │
│  │   优化器     │                                            │
│  │ (Optimizer) │                                            │
│  └──────┬──────┘                                            │
│         │                                                    │
│         ▼                                                    │
│  ┌─────────────┐                                            │
│  │   输出结果   │                                            │
│  │  (预测)     │                                            │
│  └─────────────┘                                            │
│                                                              │
└─────────────────────────────────────────────────────────────┘

浏览器兼容性 #

TensorFlow.js 支持所有支持 WebGL 的现代浏览器:

浏览器 最低版本 WebGL 支持
Chrome 60+ WebGL 2.0
Firefox 55+ WebGL 2.0
Safari 11+ WebGL 1.0
Edge 79+ WebGL 2.0
Opera 47+ WebGL 2.0

学习建议 #

  1. 掌握 JavaScript 基础:ES6 语法、异步编程、DOM 操作
  2. 理解机器学习概念:神经网络、损失函数、优化器
  3. 从简单开始:先使用预训练模型,再学习训练
  4. 多看示例:官方示例库有大量参考
  5. 动手实践:在实际项目中使用 TensorFlow.js

下一步 #

现在你已经了解了 TensorFlow.js 是什么,接下来学习 安装与配置,开始你的机器学习之旅!

最后更新:2026-03-29