参考图像处理的代码,自己对脑电数据进行了应用,数据量比较小,准确率不高,主要为了理解算法结构。
参考文章:https://zhuanlan.zhihu.com/p/115866586
谢谢大佬的分享,代码很清晰,便于理解,但是下载后还是不能直接在我的脑电数据中运行进行处理,主要是数据结构和数据类型不同,需要手动再进行调整。
原文中是对minitst数据进行了图像的分类,训练数据是四维的,有10个标签,脑电数据这里用的三维,并且维度中的数据长度也有影响,所以一定需要对网络结构进行调整,可以两篇文章中的代码对比阅读,更有利于对维度的变化,结构的调整进行理解。
我的脑电是用Matlab采集的,16维的数据和标签保存在结构体数据中,所以在代码的最开始还对数据进行了手动分段
整个代码分为几个部分:准备数据,搭建神经网络,训练数据,预测数据
1.导入包
#导入包
import torch
torch.set_default_tensor_type(torch.FloatTensor)
import numpy as np
import scipy.io
import torch.utils.data as Data
import torch.nn as nn
import torch.nn.functional as F
2.准备数据
#准备数据
# make data
## load eegdata
samplesfile = scipy.io.loadmat('/Users/thrive/Documents/Dong/research/mypaper/code/dataset/rawdata/subject1.mat') #读入字典
eegdata = samplesfile['eeg'] #提取numpy数组,结构体名称是eeg,包含字段有name date data1 marker1 data2 marker2……
print('# test eegdata:',eegdata[0,0]['marker1'][:2,:1],'\n')#打印出来marker1字段看一下
tbase=0.2#基线长度
ttrial=0.5#关注的脑电时间段
fs=1200#采样率
## train data
### epoch data将数据分段
epochdata=np.zeros((20,16,int((tbase+ttrial)*fs)))#初始化一个数组用于存放分段后的脑电数据
i=0
for temp in epochdata:
epochdata[i,:,:]=eegdata[0,0]['data1'][:,round((eegdata[0,0]['marker1'][i,1]-tbase)*fs):round((eegdata[0,0]['marker1'][i,1]-tbase)*fs)
本文档介绍了如何使用PyTorch构建卷积神经网络(CNN)处理脑电(EEG)数据,虽然数据量较小导致准确率不高,但主要目的是理解算法结构。作者参考了图像分类的代码,将脑电数据(16维,三维结构)进行处理,涉及到数据预处理、网络结构调整、训练与预测等步骤。代码中包括数据分段、网络搭建、训练和预测四个部分,适合对比学习以理解不同数据维度对模型的影响。
最低0.47元/天 解锁文章
852

被折叠的 条评论
为什么被折叠?



