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))
运行方式
- 将上述代码保存为
train_iris.py。 - 在Edge Impulse官网获取,替换代码中的
变量。 - 在终端执行:
python train_iris.py
验证方法与通过标准
- 运行成功标志:程序无报错退出,并打印出验证集准确率。
- 准确率判定:Iris数据集为线性可分数据,使用上述网络结构训练50轮后,验证集准确率应达到 ≥0.90。若低于此值,可尝试增加训练轮数至100或调整学习率。
- 分类报告:输出的precision/recall/f1-score应显示三个类别均有合理表现(通常≥0.85)。
常见问题
- 无效:确认Key已正确复制且账号有权限创建模型。
- 依赖缺失:若提示
edgeimpulse模块不存在,请确认已执行pip install edgeimpulse。 - 训练不收敛:检查是否已对特征做标准化(代码中已包含),或适当增加训练轮数。