打通脑电EEG深度学习模型训练的最后一公里----端到端EEG模型训练模板
2026/9/6 5:33:38 网站建设 项目流程

在神经信息学和脑机接口领域,使用PyTorch等深度学习框架处理脑电(EEG)信号已经成为我们日常科研的重要部分。但在实际项目中,我们经常会遇到一个痛点:繁杂的代码架构、混乱的实验记录、以及每次更换模型或被试数据集都要大改代码的折磨。

为了解决这些“脏活累活”,我开发并开源了一个适用于脑电信号端到端深度学习模型训练的PyTorch代码模板。今天就带大家快速了解一下,这个项目是如何帮你省下熬夜调参的时间的。

核心亮点介绍

1. 告别混乱,极其清晰的工程结构

一个好的科研项目离不开井井有条的文件管理。本模板提供了一套标准化的目录结构:

  • 代码将用于保存最佳实验性能模型的文件夹(checkpoint​)与集中存放不同算法类的文件夹(models)进行了明确的区分。

  • 数据集被统一存放在dataset​ 目录下,并且支持“多数据集 -> 多被试(Subject) -> 多实验(Session)”的层级嵌套管理,再也不用为找样本文件发愁。

  • 训练过程的具体数据会自动保存在logs​ 文件夹,并以“模型名_日期_时间”的规则命名,方便随时回溯和复现。

    /* 项目文件结构 工作路径:./pytorch_example --📂checkpoint ->best_model_repeat1-20250417_173703.pth :每一次实验保存的性能最好的模型 ··· --📂configs ->model_config.json :训练过程中的超参数设置,一般不要更改其结构,可以复制多份在main.py中填写相应路径 --📂dataset ->📂dataname1 ->📂dataname2 :可以是多个数据集,文件夹以数据集名称命名,数据集名称可以在json文件中配置 ->📂S1 ->📂S2 ->📂S3 :被试文件夹,可以有多个被试,如果是被试独立实验需要在json文件中配置需要针对哪个被试实验 ->📂session1 ->📂session2 :每个被试可以有多次实验,如果只有一次实验,就只留一个文件夹就行 ->📄sample_0.npy ->📄sample_1.npy... ->📄sample_10.npy :该被试的一次实验包含多个trails,每个trails保存为一个npy文件,npy文件的格式后面介绍 --📂logs ->📂EEGNet-20250417_174017 :训练过程的数据保存的文件夹,命名规则是,模型名_日期_时间 ->📄logs.json :训练过程的具体数据保存为json格式的文件 --📂models ->📂model_name ->📂EEGNet :不同模型保存在不同文件夹中,可以在json文件中配置选择的模型名称 ->📄EEGNet.py :具体的模型的类 --📂out :可以自己在该文件夹中保存一点自己想要的结果,代码不会操作该文件夹 --📂picture :可以自己在该文件夹中保存一点自己想要的结果,代码不会操作该文件夹 --📂utils ->📄dataset.py:声明了EEGDataset类,继承于pytorch的Dataset类,用来读取样本数据 ->📄datasplit.py :将数据按照一定比例随机划分为训练集/测试集/验证集,划分比例可以在json文件中配置 ->📄drawData.py :声明了绘图的类,具体食用方法会在示例代码中介绍 ->📄read_json.py :读取json文件的函数 ->📄save_json.py :保存json文件的函数 --📄main.py :程序入口,里面会有程序的使用示例 --📄ModelTrainer.py :模型训练的逻辑,以类的形式呈现,可以供大家自行写类继承 */
2. 零代码改动,全凭JSON配置打天下

告别在成百上千行代码中寻找参数的痛苦!我们将训练过程中的核心超参数全部提取到了model_config.json文件中。

  • 你可以直接在JSON文件里修改初始学习率、Batch Size、训练轮数(epochs)以及优化器(如Adam)。

  • 想要按特定比例随机划分训练集、测试集和验证集?或者需要针对某一个特定的被试(如 “S1”)进行独立实验?只需在配置文件中改动几个键值对即可生效,完全无需修改底层代码。

    {"model_name":"填写模型名称,需要和模型文件夹同名","data_name":"填写数据集名称,需要和数据集文件夹同名","data_root_path":".\\dataset\\","save_logs_path":"./logs/","save_model_path":"./checkpoint/","learning_rate":"初始学习率","batch_size":"batch_size","epochs":50,"repeat_time":"10:这个是模型训练的次数,每一次都是从头开始","optimizer":"Adam:优化器,目前只写入了这一种,如需添加可以在ModelTrainer.py的initialize_optimizer函数中添加","dropout_rate":0.5,"activation_function":"ReLU:没什么用,还得取决于你具体模型中用的啥,不改也行","loss_function":"CrossEntropyLoss:目前只写入了这一种,如需添加可以在ModelTrainer.py的initialize_loss函数中添加","early_stopping":{"Enable":"yes:早停策略,还没在训练中具体实现,如需要可以使用","monitor":"val_loss","patience":10,"restore_best_weights":true},"learning_rate_decay":"yes:学习率衰减策略,也没在训练中实现,具体可以自己自定义","init_seed":42,"data_split:数据划分的比例":{"train":0.8,"test":0.1,"val":0.1},"Subject_sigal:被试独立实验的,需要填写是在哪个被试上实验":{"sigal":"yes","subject_name":"S1"}}
3. 简单统一的数据格式

在数据输入端,模板采用了标准且轻量的.npz格式来存储每个trial的数据。

  • 每个样本文件内部只包含两个核心键值:data​ 和label
  • 其中data​ 为你的脑电信号,格式严格规定为“采样点数 × 导联数”,label则对应相应的分类标签,简单明了。
4. 强大的训练逻辑与交叉验证
  • 核心的模型训练逻辑被高度封装在ModelTrainer.py中,你可以直接使用,也可以写新的类来继承它,扩展性极强。
  • 模板内置了早停策略(Early Stopping)和学习率衰减的接口设置。
  • 此外,针对脑电领域常用的K折交叉验证,只需在JSON中开启Cross_validation​ 并填写Fload_Num,就能全自动完成交叉验证流程。
5. 专属Web端可视化,告别枯燥控制台(🆕新功能!)

为了让模型评估更加直观,我们在近期的更新中加入了Web端便捷绘图功能。

  • 你只需要打开htmlDraw​ 文件夹,在浏览器中运行index.html
  • 上传训练生成的日志文件后,不仅可以区分查看交叉验证和非交叉验证的数据,还能自由选择绘制特定实验或折数的损失函数曲线与总体指标信息。

总结

作为一名长期跟EEG信号处理和深度学习打交道的科研工作者,我深知一套好用的端到端模板能为实验带来多大的便利。无论你是刚入门脑电深度学习的新手,还是想要规范化实验室代码架构的“老鸟”,这个模板都能帮你打通模型训练的“最后一公里”。

欢迎大家前往项目的 GitHub 主页查看完整代码、拉取使用。如果觉得有帮助,别忘了点个 Star 支持一下!如果你有任何改进建议,也欢迎随时提交 Issue 一起交流。

💡 项目地址:
https://github.com/star-zwx/pytorch_example_for_EEG_DeepLearning/tree/master

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询