当前位置: 首页 > news >正文

(B站TinyML 教程学习笔记)C15 - 在 Edge Impulse 中训练模型+C16 - 如何评估模型性能+C17 - 欠拟合与过拟合+C18 - 如何使用模型进行推理

00:07 - 进入神经网络分类器页面

  • 完成特征提取后,进入神经网络分类器页面。
  • 这里可以配置模型与训练过程。
  • 这些配置项都属于“超参数”。

一、训练中的核心超参数

00:23 - Epoch(训练轮数)

  • 模型完整遍历一次训练集,并更新参数。
  • 这称为一个 Epoch(周期)。
  • Epoch 数量可以手动调整。

00:38 - 学习率(Learning Rate)

  • 控制模型参数每次更新的幅度(步长)。
  • 学习率太大:训练可能不稳定。
  • 学习率太小:训练速度很慢。

00:45 - 最低置信度(Minimum Confidence)

  • 训练时不会使用。
  • 在验证或测试阶段使用。
  • 如果预测概率低于该值,则会被标记为“不确定”。

二、神经网络结构(Dense 全连接网络)

00:59 - 三层神经网络

  • 这是一个简单的 Dense(全连接)神经网络。
  • 每层节点之间全部互相连接。

网络结构:

输入层 → 隐藏层1 → 隐藏层2 → 输出层


01:13 - 输入特征

  • 输入是之前提取出的 33 个特征。
  • 特征本质上只是数字。
  • 这些特征会组成一个长度为 33 的数组。

01:20 - 第一层神经元

  • 第一层有 20 个节点(神经元)。
  • 每个节点都会接收到全部 33 个输入特征。

每个节点执行:

  1. 输入 × 权重(Weight)
  2. 加上偏置(Bias)
  3. 全部求和
  4. 通过激活函数

01:46 - ReLU 激活函数

  • 使用 ReLU(整流线性单元)作为激活函数。
  • ReLU 会增加模型的非线性表达能力。
  • 神经网络因此具备“决策能力”。

02:04 - 输出层与 Softmax

  • 最后一层节点数量 = 分类类别数量。
  • 这里有 4 个类别,因此有 4 个输出节点。

输出层使用 Softmax:

Softmax 的作用:

  • 将输出转换为概率。
  • 每个概率范围:0~1。
  • 所有概率总和 = 1。

例如:

P1 = 0.1 P2 = 0.2 P3 = 0.6 P4 = 0.1

则模型预测属于第三类。


三、训练过程(Forward + Backpropagation)

03:15 - 输入训练样本

  • 取一个训练样本的特征输入模型。
  • 每个样本都对应一个标签。

例如:

特征 → [0.2, 0.8, 0.5 ...] 标签 → 类别2


03:28 - 参数随机初始化

  • 神经网络刚开始时:
    • 权重随机
    • 偏置随机
  • 所以最开始预测通常很差。

03:36 - 前向传播(Forward Propagation)

  • 数据从输入层一路计算到输出层。
  • 最终得到预测结果。

流程:

输入 → 隐藏层 → 输出层 → 概率


03:49 - 损失函数(Loss Function)

  • 损失函数用于衡量预测错误程度。
  • 预测越差,Loss 越大。

损失函数目标:

Loss 越低越好。


04:09 - 反向传播(Backpropagation)

  • 根据 Loss 更新模型参数。
  • 更新对象:
    • 权重
    • 偏置

核心目标:

让下一次预测更准确。


04:23 - 一个 Epoch 的定义

  • 当训练集所有样本都跑完一次。
  • 就完成了一个 Epoch。

04:35 - Loss 与 Accuracy 变化

训练过程中通常会出现:

Loss:

  • 一开始很高
  • 后面逐渐下降
  • 最后趋于稳定

Accuracy:

  • 一开始很低
  • 后面逐渐升高
  • 最后趋于稳定

关系:

Loss ↓ Accuracy ↑


四、验证集(Validation Set)

05:47 - Edge Impulse 自动划分验证集

  • Edge Impulse 会从训练集中随机抽取 20%。
  • 这些数据用于验证。

注意:

  • 验证集不参与参数更新。
  • 仅用于评估模型泛化能力。

06:17 - 验证 Loss 与 Accuracy

理想情况:

训练集表现 ≈ 验证集表现

如果:

训练很好 验证很差

说明:

模型可能过拟合。


五、混淆矩阵(Confusion Matrix)

07:17 - 混淆矩阵作用

  • 用于观察:
    • 实际类别
    • 预测类别

可以快速发现:

  • 哪些类别容易混淆
  • 哪些类别识别效果差

六、欠拟合与过拟合

15:22 - 欠拟合(Underfitting)

特点:

  • 模型太简单。
  • 无法学习数据规律。
  • 训练集和验证集表现都差。

表现:

  • Accuracy 很低
  • Loss 很高

解决方法:

  • 增加训练时间
  • 增加特征
  • 增加网络层数
  • 增加节点数
  • 收集更多数据

16:52 - 过拟合(Overfitting)

特点:

  • 模型记住了训练数据。
  • 对新数据泛化能力差。

表现:

  • 训练准确率很高
  • 验证准确率很低

即:

训练集很好 验证集很差


七、解决过拟合的方法

20:32 - Early Stopping(早停法)

原理:

  • 当验证集效果开始下降时停止训练。

作用:

  • 防止模型继续记忆训练数据。

Edge Impulse:

  • 默认已经自动启用早停法。

21:14 - 降低模型复杂度

方法:

  • 减少层数
  • 减少节点数量

因为:

  • 模型越复杂,越容易过拟合。


21:25 - 正则化(Regularization)

作用:

  • 惩罚过于复杂的模型。
  • 限制参数过大。

Edge Impulse:

  • 默认加入 L2 正则化。

L2 正则化:

λ:正则化强度(超参数)


21:49 - Dropout

原理:

  • 训练时随机关闭部分神经元。

作用:

  • 防止模型过度依赖某些节点。
  • 提高泛化能力。

八、推理(Inference)

22:34 - 推理是什么

推理:

  • 使用训练好的模型处理未知数据。
  • 输出预测结果。

即:

新数据 → 模型 → 预测


九、TensorFlow Lite 与 Int8 量化

22:53 - 下载模型

  • Edge Impulse 下载的是 TensorFlow Lite 模型。
  • 使用 Int8 量化版本。

24:01 - 为什么量化

量化:

  • 将浮点数转换为整数。

例如:

float → int8

作用:

  • 降低内存占用
  • 提高 MCU 推理速度

缺点:

  • 精度会略微下降

十、模型输入输出

23:46 - 输入格式

模型输入:

1 × 33 的 int8 数组

即:

  • 33 个特征
  • 每个特征是 int8

24:35 - 输出格式

模型输出:

4 个 int8 数值

对应:

  • 4 个类别的概率。

十一、Edge Impulse 推理流程

25:31 - Edge Impulse 库功能

下载的库包含:

  • 特征提取代码
  • 神经网络模型
  • 推理函数

25:45 - 实际推理步骤

步骤:

  1. 采集加速度计数据
  2. 保存到数组
  3. 特征提取
  4. 输入模型
  5. 输出概率
  6. 选择最大概率类别

十二、实时动作识别

26:50 - 实时分类流程

循环执行:

采样 → 特征提取 → 推理 → 执行动作


27:11 - 阈值判断(置信度)

例如:

如果:

P(left_right) > 0.5

则:

  • 执行对应动作。

阈值:

  • 越高越严格
  • 越低越宽松

十三、实时系统中的问题

28:07 - 推理耗时

问题:

  • 特征提取和推理需要时间。
  • 可能导致漏采样。

28:33 - 定时器方案

方法:

  • 每隔固定时间触发采样。

例如:

  • 每 16ms 采样一次。

28:45 - DMA 方案

DMA:

  • Direct Memory Access(直接内存访问)

作用:

  • 后台自动采集数据。
  • CPU 可以同时执行推理。

29:09 - 滑动窗口

原理:

  • 新窗口与旧窗口部分重叠。
  • 持续进行实时分类。

例如:

窗口1:0~2秒 窗口2:1~3秒 窗口3:2~4秒


十四、整体流程总结

完整 Edge Impulse 工作流:

  1. 收集数据
  2. 数据打标签
  3. 特征提取
  4. 划分训练/验证/测试集
  5. 训练模型
  6. 调整超参数
  7. 检查 Loss 与 Accuracy
  8. 检查过拟合/欠拟合
  9. 导出 TensorFlow Lite 模型
  10. 部署到 MCU
  11. 实时采样
  12. 特征提取
  13. 推理
  14. 执行动作
http://www.jsqmd.com/news/816943/

相关文章:

  • 如何高效配置OpenDroneMap:5个实战技巧深度解析无人机数据处理方案
  • 三分钟解锁全平台QQ聊天记录:你的数据,你做主!
  • 从开发者视角看taotokenapi调用的整体响应速度与成功率
  • 3个实用技巧让magnetW磁力搜索工具发挥最大价值
  • 前端Web开发(2)
  • 2026年外墙仿石漆服务商哪家好?主流品牌选型参考与行业实力分析 - 产业观察网
  • Postman便携版:无需安装的Windows API测试工具终极指南
  • Topit:3分钟掌握macOS窗口置顶,工作效率提升200%的终极指南
  • ClawShelf开源媒体库:开发者如何用元数据与标签管理数字资产
  • PRD写得再厚,客户为何不买账?给需求绑上业务的救命绳
  • 2026年成都3-6岁少儿英语启蒙机构对比评测:专业性与教学理念深度对比 - 品牌种草官
  • Python自动化管理Synology NAS:Synology API v0.8全面解析
  • Python Redis客户端实战:redis-py深度解析
  • B站直播推流码终极指南:如何轻松绕过官方限制使用OBS直播
  • 【ROS2速成 - Day2】ROS2五大核心概念吃透(嵌入式类比记忆,超好懂)
  • WhoDB:轻量级现代数据库管理工具的技术架构与核心功能解析
  • 2026年别墅仿石漆供应厂家哪家好:实力维度分析与主流品牌选型参考 - 产业观察网
  • stm32入门常识
  • LXMusic音源终极指南:三步快速解锁全网高品质音乐
  • 2026 南京金轮国际纹眉深度测评:选南京纹绣世家,4 家直营门店技术 / 安全 / 口碑全优 - 小艾信息发布
  • 深入理解C语言指针(三)
  • 【IE大纲】工业工程工程师知识框架
  • 在hermes agent项目中配置custom provider指向taotoken的完整流程
  • 源德广告是做什么的?在普宁做了多少年了?|品牌介绍与服务概览 - 掌上普宁品牌观察
  • CATIA多实体零件自动化拆分:pyCATIA解决复杂几何体管理的技术挑战
  • 乌鲁木齐黄金回收“报价即结算价”实体店有哪些?实测发现一家靠谱选择 - 新闻快传
  • C# 三层架构
  • 《Java面试85题图解版(二)》进阶深化上篇:并发编程 + JVM
  • C++ AVL树的学习
  • 【CanMV K210】显示交互 触摸屏画图与 LCD 轨迹绘制