# 基于单通道脑电信号的自动睡眠分期研究
**Automatic Sleep Staging Based on EEG Signal using Deep Network**
> 本项目参考自https://github.com/flower-kyo/Tinysleepnet-pytorch
## 简介
本项目使用了Sleep-EDF公开数据集的SC数据进行实验,一共153条整晚的睡眠记录,使用Fpz-Cz通道,采样频率为100Hz,数据获取与具体数据信息可前往数据集官网查看:[Sleep-EDF Database Expanded v1.0.0 (physionet.org)](https://physionet.org/content/sleep-edfx/1.0.0/)。
整套代码写的较为简洁,而且有添加相应的注释,因此进行分享,而且不仅仅说是睡眠分期,也可以作为学习如何使用神经网络去进行**时序数据分类**问题的一个入门项目,包括怎么用GRU、LSTM和Attention这些经典网络结构。
网络结构(具体可查看network.py文件):
- 网络整体结构类似于[TinySleepNet](https://ieeexplore.ieee.org/document/7961240/),对RNN部分进行了修改,增加了双向RNN、GRU、Attention等网络结构,可根据参数进行调整选择。
- 定义了seq_len参数,可以更灵活地调整batch_size与seq_len。
数据集加载(具体可查看dataset.py文件)
- 直接继承自torch的Dataset,并定义了seq_len和shuffle_seed,方便调整输入,并复现实验。
训练(具体可查看train.py文件):
- 定义并使用了focal loss损失函数
- 在实验中有使用wandb,感觉用起来还挺方便的,非常便于实验记录追溯
测试(具体可查看test.py文件):
- 可以输出accuracy、mf1、recall_confusion_matrics、precision_confusion_matrics、f1_confusion_matrics评价指标
## 使用
### 1. 安装环境
```
pip install -r requirements.txt
```
### 2. 数据准备
下载数据,信号和标注文件格式为edf文件。
```
python downloading_sleepedf.py
```
处理数据,并保存为numpy数组。
```
python prepare_data.py
```
### 3. 模型训练
```
python train.py --n_epochs 150 --batch_size 16 --seq_len 64 --network "GRU"
```
如果不知道要使用哪些哪些参数,可以看下代码,或者使用`python train.py -h`来查看。
### 4. 模型测试
```
python test.py --batch_size 16 --seq_len 64 --network "GRU" --model_path "./models/model_GRU.pt" --data_path "./data/sleepedf/npz"
```
可输出precision、recall和F1的混淆矩阵。
### 5. 模型预测
上传了一个小seq_len训练的模型,效果没那么好,但可以拿来测试体验一下。
```
python predict.py --seq_len 16 --input_file "./data/eeg_signal.txt"
```
## Web系统
新增了一个简单的Web演示系统,界面截图如下:
![image-20230101170849127](./images/image-20230101170849127.png)
### 部署与启动
```
cd web
./run.sh
```
执行run.sh会自动下载需要的依赖库,但是没有包含pytorch,如若没有需要前往官网下载,推荐1.10以上的版本。
## 补充
我自己是在服务器上跑的,使用显卡为A100 256G显存,因此seq_len会设置的比较大些,自己可根据具体情况进行调整。有发现seq_len越大,效果会稍微好些,在设置seq_len=64,使用GRU时,测试集上准确率可达87%,MF1可达0.80。但使用Attention或者Transformer的Encoder进行训练时,发现效果并不怎么好,只能达到72%左右,而且如果堆叠太多层encoder就会跑不起来了,不是很懂。
没有合适的资源?快使用搜索试试~ 我知道了~
Python实现基于单通道脑电信号的自动睡眠分期研究项目源码
共21个文件
py:12个
txt:3个
pt:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 153 浏览量
2024-05-14
21:56:22
上传
评论
收藏 10.53MB ZIP 举报
温馨提示
Python实现基于单通道脑电信号的自动睡眠分期研究项目源码Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码 Python实现基于单通道脑电信号的自动睡眠分期研究项目源码
资源推荐
资源详情
资源评论
收起资源包目录
基于单通道脑电信号的自动睡眠分期研究.zip (21个子文件)
code
data
eeg_signal.txt 8.17MB
network.py 5KB
predict.py 2KB
dataset.py 2KB
web
network.py 5KB
predict.py 2KB
templates
sleepstaging.html 5KB
server.py 2KB
requirements.txt 82B
models
model_GRU.pt 4.73MB
run.sh 93B
preprocessing.py 6KB
prepare_data.py 911B
requirements.txt 119B
models
model_GRU.pt 4.73MB
images
image-20230101170849127.png 132KB
train.py 5KB
test.py 3KB
README.md 3KB
download_sleepedf.py 2KB
focal_loss.py 576B
共 21 条
- 1
资源评论
FL1768317420
- 粉丝: 4312
- 资源: 4730
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功