快速入门
WebNN(Web Neural Network,Web 神经网络)API 通过计算图在 Web 应用中实现神经网络运算。计算图是一种有向图,其中的节点表示操作或输入变量,每个节点的输出会作为后续节点的输入。
使用操作和张量
该 API 使用四个主要抽象:
MLContext是执行环境,通过navigator.ml.createContext()创建。它负责调度图的执行并创建张量MLGraphBuilder使用add()、matmul()和conv2d()等操作构建计算图MLOperand对象表示图中的节点:输入、常量以及操作的结果。操作数描述数据类型和形状,本身不保存数据MLTensor对象保存流入和流出已编译图的数据。你把输入数据写入张量,再从张量读回结果
图的生命周期
WebNN API 支持四个主要阶段:
- 构建计算图
- 编译图
- 执行图
- 与其他 Web API 集成以获取输入数据(例如,用于图像和视频帧的媒体 API,或用于传感数据的传感器 API)
下面是一个基本示例,演示如何使用操作、输入和输出来构建、编译并执行一个图。有关完整的模型构建模式,请参阅详细教程。
使用 WebNN API 构建你的第一个图
executing-an-MLGraph-using-MLTensors.js
const descriptor = {dataType: 'float32', shape: [2, 2]};
const context = await navigator.ml.createContext();
const builder = new MLGraphBuilder(context);
// 1. 创建计算图 'C = 0.2 * A + B'。
const constant = builder.constant(descriptor, new Float32Array(4).fill(0.2));
const A = builder.input('A', descriptor);
const B = builder.input('B', descriptor);
const C = builder.add(builder.mul(A, constant), B);
// 2. 编译图。
const graph = await builder.build({'C': C});
// 3. 创建可重复使用的输入和输出张量。
const [inputTensorA, inputTensorB, outputTensorC] =
await Promise.all([
context.createTensor({
dataType: A.dataType, shape: A.shape, writable: true
}),
context.createTensor({
dataType: B.dataType, shape: B.shape, writable: true
}),
context.createTensor({
dataType: C.dataType, shape: C.shape, readable: true
})
]);
// 4. 初始化输入。
context.writeTensor(inputTensorA, new Float32Array(4).fill(1.0));
context.writeTensor(inputTensorB, new Float32Array(4).fill(0.8));
// 5. 执行图。
const inputs = {
'A': inputTensorA,
'B': inputTensorB
};
const outputs = {
'C': outputTensorC
};
context.dispatch(graph, inputs, outputs);
// 6. 读回计算结果。
const result = await context.readTensor(outputTensorC);
console.log('Output value:', new Float32Array(result)); // [1, 1, 1, 1]其他资源
- 框架与原生 JavaScript,帮助你在 JavaScript 机器学习框架和原生 WebNN 之间做出选择
- 使用框架运行模型:LiteRT.js、ONNX Runtime Web 和 Transformers.js
- 在 WebNN API 中使用 TypeScript,了解类型定义
- WebNN API 参考和操作列表
- 故障排除,了解常见的 WebNN 错误
Last updated on