4. 模型训练与评估

任务目标

本案例将使用Edge Impulse的Python SDK训练一个简单的全连接神经网络,对UCI Iris数据集进行三分类,并在独立验证集上评估模型准确率。完成本案例后,你将掌握Edge Impulse中模型训练与评估的最小闭环流程。

环境与依赖

  • Python 3.8+
  • 安装依赖:pip install edgeimpulse numpy scikit-learn
  • 需要Edge Impulse账号(免费版即可),用于获取

完整实现代码

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from edgeimpulse.api import EdgeImpulseApi

# 1. 加载并准备数据
data = load_iris()
X = data.data
y = data.target

# 划分训练集与验证集(70%训练,30%验证)
X_train, X_val, y_train, y_val = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# 标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_val = scaler.transform(X_val)

# 2. 初始化Edge Impulse API
 = "ei_your__here"  # 替换为你的实际
ei = EdgeImpulseApi()

# 3. 创建并训练模型
model = ei.create_model(
    name="iris_classifier",
    input_shape=(4,),          # 4个特征
    num_classes=3,             # 3个类别
    layers=[
        {"units": 16, "activation": "relu"},
        {"units": 8, "activation": "relu"},
        {"units": 3, "activation": "softmax"}
    ]
)

# 训练模型
model.train(
    X_train, y_train,
    epochs=50,
    batch_size=8,
    learning_rate=0.001
)

# 4. 在验证集上评估
accuracy = model.evaluate(X_val, y_val)
print(f"验证集准确率: {accuracy:.4f}")

# 5. 输出分类报告(可选)
from sklearn.metrics import classification_report
y_pred = model.predict(X_val)
print(classification_report(y_val, y_pred, target_names=data.target_names))

运行方式

  1. 将上述代码保存为 train_iris.py。
  2. 在Edge Impulse官网获取,替换代码中的 变量。
  3. 在终端执行:python train_iris.py

验证方法与通过标准

  • 运行成功标志:程序无报错退出,并打印出验证集准确率。
  • 准确率判定:Iris数据集为线性可分数据,使用上述网络结构训练50轮后,验证集准确率应达到 ≥0.90。若低于此值,可尝试增加训练轮数至100或调整学习率。
  • 分类报告:输出的precision/recall/f1-score应显示三个类别均有合理表现(通常≥0.85)。

常见问题

  • 无效:确认Key已正确复制且账号有权限创建模型。
  • 依赖缺失:若提示 edgeimpulse 模块不存在,请确认已执行 pip install edgeimpulse。
  • 训练不收敛:检查是否已对特征做标准化(代码中已包含),或适当增加训练轮数。
Iris分类模型训练与评估流程 数据准备 加载Iris → 划分训练/验证集 特征标准化 StandardScaler 模型构建 16-8-3 全连接网络 模型训练 epochs=50, lr=0.001 验证集评估 计算准确率 + 分类报告 输出:验证集准确率 ≥ 0.90 即通过