人工智能¶
TinyAI — 边缘设备上的神经网络推理与训练
纯 C++17 端侧 AI 框架,支持 on-device learning。从张量运算到模型训练到 INT8 量化部署,一条龙覆盖。专门针对 ESP32-S3 (PSRAM) 优化。
架构速览¶
-
Core 训练原语
Tensor· N 维张量
Activation· ReLU / Sigmoid / Tanh / Softmax
Loss· MSE / CrossEntropy / BinaryCE
Optimizer· SGD (动量) / Adam -
Layers 神经网络层
Dense· 全连接 (Xavier 初始化)
Conv1D/2D· 卷积 (He 初始化)
Pool· Max / Avg 池化
Norm· LayerNorm
Attention· 多头自注意力 -
Models 模型容器
Sequential· 层堆叠器
MLP· 多层感知机便捷封装
CNN1D· 一维卷积便捷封装 -
Quant 量化压缩
INT8/INT16· 对称量化 · PTQ
FP8· E4M3FN / E5M2 软件实现
tiny_quant_dense_forward_int8 -
Train 训练循环
Dataset· shuffle / split / mini-batch
Trainer· fit / evaluate -
Examples 端到端示例
MLP + INT8 PTQ· Iris 分类
CNN1D + FP8· 信号分类
Attention· 小型 Transformer
场景索引¶
-
从零训练一个小模型
→ 用 MLP + Dataset + Trainer
-
在 ESP32 上推理已训练的模型
→ 编译时关闭
TINY_AI_TRAINING_ENABLED,只跑forward() -
模型量化压缩
→ PTQ 流程:
calibrate → quantize → INT8 dense forward -
时序信号分类
→ CNN1D + Conv1D + MaxPool1D
-
小样本特征提取
→ Attention 多头自注意力
-
自定义网络结构
→ 继承
tiny::Layer,实现forward()和可选的backward()
快速开始¶
#include "tiny_ai.h"
// 1. 定义模型
tiny::Sequential model;
model.add(new tiny::Dense(4, 64)); // 输入 4 维 → 隐藏 64
model.add(new tiny::ActivationLayer(tiny::ActType::ReLU));
model.add(new tiny::Dense(64, 3)); // 隐藏 64 → 输出 3 类
// 2. 训练配置
tiny::SGD optimizer(0.01f, 0.9f); // LR=0.01, momentum=0.9
tiny::Dataset dataset(inputs, labels, 150);
tiny::Trainer trainer(&model, &optimizer);
// 3. 训练
trainer.fit(&dataset, 100, 16); // 100 epochs, batch=16
// 4. 推理
tiny::Tensor output = model.forward(input);
依赖链¶
TinyAI 位于中间件的最顶层,复用 tinymath 的张量原语和 tinydsp 的频域/滤波能力,从传感器采数 → 信号处理 → 模型推理形成完整端侧链路。