没有官方代码,怎么复现论文?我用 UCI HAR 跑通了一条完整深度学习复现线
UCI HAR 无源码论文复现:从数据接入到 ConvBLSTM-PMwA 多种子结果整理
1. 这次复现做的是什么
这次做的是一条比较标准的时序深度学习论文复现线,数据集选的是经典公开数据集 UCI HAR Dataset,目标论文是:
A Novel CNN-based Bi-LSTM parallel model with attention mechanism for human activity recognition with noisy data
我之所以选这个组合,原因很直接:
UCI HAR足够经典,适合做公开复现- 六分类人体行为识别,任务边界清楚
- 传感器时序数据,适合
CNN / Bi-LSTM / Attention - 数据规模不算大,个人设备也能推进
- 这篇论文全文可以拿到,但没有直接找到作者官方代码,适合按“无源码论文复现”来做
这次的目标不是“简单跑通一个仓库”,而是认真走一遍:
- 固化数据协议
- 自己实现 baseline
- 自己实现目标模型
- 跑出结果
- 整理成图表和可展示文档
2. 数据集和任务设置
UCI HAR Dataset 是智能手机传感器的人体行为识别数据集,常见设定是:
30个受试者6类活动- 使用加速度计和陀螺仪信号
- 官方给出
train/test划分
这次我先固定最基础的一版协议:
- 使用官方
train/test split - 输入形状固定为
9 x 128 - 9 个通道包括:
body_acc_x/y/zbody_gyro_x/y/ztotal_acc_x/y/z
标签就是标准六分类:
WALKINGWALKING_UPSTAIRSWALKING_DOWNSTAIRSSITTINGSTANDINGLAYING
3. 这次复现的模型
这次先做了两个层次:
3.1 Baseline
先实现一个相对简单的 1D CNN baseline,用来确认数据管线和训练流程没有问题。
3.2 目标模型
目标模型是我根据论文描述实现的 ConvBLSTM-PMwA,核心思路可以概括成:
- 并行卷积提取局部时序特征
Bi-LSTM建模前后时序依赖Attention聚合关键时刻信息- 最后做六分类输出
也就是说,这次复现不是只停留在“跑个 CNN”,而是把论文方法的主结构真正落地出来了。
4. 复现过程中真正踩到的坑
这部分其实是我觉得最有价值的地方。
一开始链路虽然跑通了,但很快发现一个现实问题:
训练速度不对。
4.1 小文件 I/O 拖慢训练
我最初的处理方式是:
- 每个样本保存成一个独立
.npy DataLoader每次按 manifest 去读单个文件
这个方案的优点是直观,但缺点也很明显:
- 小文件太多
- 训练时 I/O 开销很重
- 多随机种子长训练特别慢
所以我后来把处理格式改成了:
- 每个 split 一个连续数组文件
train/signals.npytest/signals.npy
- manifest 里只保存
signal_array_pathsignal_index
这样一来,数据读取方式就从“几千个小文件”变成了“连续数组按索引读取”。
4.2 当前环境对 torch worker 有限制
我本来还想继续通过 num_workers > 0 提速,但实际跑的时候又碰到了另一个环境问题:
torch_shm_manager ... Operation not permitted
也就是说,这个环境里多进程共享内存是受限的。
所以最后稳定可用的设置反而是:
num_workers = 0
这也说明一个事实:
论文复现很多时候卡的不是模型,而是工程环境细节。
5. 当前结果
5.1 首轮 quick verification
最初的 5 epoch 快速验证结果:
cnn- accuracy
0.913471 - macro-F1
0.913895
- accuracy
convblstm_pmwa- accuracy
0.914489 - macro-F1
0.915099
- accuracy
这个阶段只能说明一件事:
- 训练链路是通的
但还不能说明目标模型真的稳定优于 baseline。
5.2 长训练与多种子结果
后面在修完数据读取后,我继续补了更正式一点的结果。
目前可用的汇总口径是:
-
cnn,15 epochs,3 seeds平均- accuracy
0.923990 - macro-F1
0.923815
- accuracy
-
convblstm_pmwa,10 epochs,3 seeds平均- accuracy
0.928062 - macro-F1
0.927663
- accuracy
ConvBLSTM-PMwA 三个 seed 分别是:
- seed
42: accuracy0.931795 - seed
52: accuracy0.919579 - seed
62: accuracy0.932813
可以直接看出两个结论:
- 从平均结果看,目标模型已经超过了
cnn baseline - 目标模型存在明显 seed 波动,尤其
seed 52掉点比较明显
6. 当前结果图

如果只看现在这一步,我会把它理解成:
ConvBLSTM-PMwA有更强的潜力- 但它比简单
cnn更敏感 - 所以这条复现线已经从“能不能跑通”进入“稳不稳定、细节对不对”的阶段
7. 我对这次复现的阶段性判断
到目前为止,这条 UCI HAR 复现线已经完成了这些关键节点:
- 论文和数据集锁定
- 数据协议固定
- baseline 实现
- 目标模型实现
- 单次结果跑通
- 更长训练和多随机种子结果补齐
- 图表和汇总表整理完成
所以现在它已经不是一个“想做”的项目,而是一个已经有第一轮结果的复现项目。
但如果说它是不是已经等于“完整复现论文”,我觉得还不能这么说。
原因主要有两个:
- 论文里仍然存在一些结构和训练细节没有完全明写
- 目标模型的 seed 波动说明还需要继续检查稳定性
8. 小结
这次 UCI HAR 无源码论文复现,最重要的收获不只是结果本身,而是把整条流程做出来了:
- 从选论文
- 到数据接入
- 到模型实现
- 到训练踩坑
- 到结果整理
如果只是看当前阶段结果,那么一句话概括就是:
ConvBLSTM-PMwA 的平均表现已经超过了 cnn baseline,但模型稳定性还值得继续追。
如果你也在做论文复现,这类项目其实很适合练手,因为它既有公开数据集,又有标准任务,还能真实暴露工程问题。
需要资料的可以私信我哟。
更多推荐




所有评论(0)