信号处理--使用EEGNet进行BCI脑电信号的分类

目录

理论

工具

方法实现

代码获取


理论

EEGNet作为一个比较成熟的框架,在BCI众多任务中,表现出不俗的性能。EEGNet 的主要特点包括:1)框架相对比较简单紧凑 2)适合许多的BCI脑电分析任务 3)使用两种卷积 Depth-wise convolution 和 separable convolution 实现普适特征的提取。

工具

Pytorch

P300 visual-evoked potentials数据集

error-related negativity responses (ERN) 数据集

movement-related cortical potentials (MRCP) 数据集

sensory motor rhythms (SMR) 数据集

方法实现

EEGNet模型定义

class EEGNet(nn.Module):def __init__(self):super(EEGNet, self).__init__()self.T = 120# Layer 1self.conv1 = nn.Conv2d(1, 16, (1, 64), padding = 0)self.batchnorm1 = nn.BatchNorm2d(16, False)# Layer 2self.padding1 = nn.ZeroPad2d((16, 17, 0, 1))self.conv2 = nn.Conv2d(1, 4, (2, 32))self.batchnorm2 = nn.BatchNorm2d(4, False)self.pooling2 = nn.MaxPool2d(2, 4)# Layer 3self.padding2 = nn.ZeroPad2d((2, 1, 4, 3))self.conv3 = nn.Conv2d(4, 4, (8, 4))self.batchnorm3 = nn.BatchNorm2d(4, False)self.pooling3 = nn.MaxPool2d((2, 4))# FC Layer# NOTE: This dimension will depend on the number of timestamps per sample in your data.# I have 120 timepoints. self.fc1 = nn.Linear(4*2*7, 1)def forward(self, x):# Layer 1x = F.elu(self.conv1(x))x = self.batchnorm1(x)x = F.dropout(x, 0.25)x = x.permute(0, 3, 1, 2)# Layer 2x = self.padding1(x)x = F.elu(self.conv2(x))x = self.batchnorm2(x)x = F.dropout(x, 0.25)x = self.pooling2(x)# Layer 3x = self.padding2(x)x = F.elu(self.conv3(x))x = self.batchnorm3(x)x = F.dropout(x, 0.25)x = self.pooling3(x)# FC Layerx = x.view(-1, 4*2*7)x = F.sigmoid(self.fc1(x))return xnet = EEGNet().cuda(0)
print net.forward(Variable(torch.Tensor(np.random.rand(1, 1, 120, 64)).cuda(0)))
criterion = nn.BCELoss()
optimizer = optim.Adam(net.parameters())

 

 评估模型分类的相关指标

def evaluate(model, X, Y, params = ["acc"]):results = []batch_size = 100predicted = []for i in range(len(X)/batch_size):s = i*batch_sizee = i*batch_size+batch_sizeinputs = Variable(torch.from_numpy(X[s:e]).cuda(0))pred = model(inputs)predicted.append(pred.data.cpu().numpy())inputs = Variable(torch.from_numpy(X).cuda(0))predicted = model(inputs)predicted = predicted.data.cpu().numpy()for param in params:if param == 'acc':results.append(accuracy_score(Y, np.round(predicted)))if param == "auc":results.append(roc_auc_score(Y, predicted))if param == "recall":results.append(recall_score(Y, np.round(predicted)))if param == "precision":results.append(precision_score(Y, np.round(predicted)))if param == "fmeasure":precision = precision_score(Y, np.round(predicted))recall = recall_score(Y, np.round(predicted))results.append(2*precision*recall/ (precision+recall))return results

 模型的训练和测试

batch_size = 32for epoch in range(10):  # loop over the dataset multiple timesprint "\nEpoch ", epochrunning_loss = 0.0for i in range(len(X_train)/batch_size-1):s = i*batch_sizee = i*batch_size+batch_sizeinputs = torch.from_numpy(X_train[s:e])labels = torch.FloatTensor(np.array([y_train[s:e]]).T*1.0)# wrap them in Variableinputs, labels = Variable(inputs.cuda(0)), Variable(labels.cuda(0))# zero the parameter gradientsoptimizer.zero_grad()# forward + backward + optimizeoutputs = net(inputs)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.data[0]# Validation accuracyparams = ["acc", "auc", "fmeasure"]print paramsprint "Training Loss ", running_lossprint "Train - ", evaluate(net, X_train, y_train, params)print "Validation - ", evaluate(net, X_val, y_val, params)print "Test - ", evaluate(net, X_test, y_test, params)

模型提取部分特征的可视化

 

代码获取

信号处理-使用EEGNet进行BCI脑电信号的分类icon-default.png?t=N7T8https://download.csdn.net/download/YINTENAXIONGNAIER/89025247

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/768137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关闭 Microsoft Word 2010 配置窗口

关闭 Microsoft Word 2010 配置窗口 References 出现这种问题,主要是安装时所用账户和目前登陆的账户不为同一个账户造成的。或者你进行过覆盖安装或是重新安装过系统,但是 office 的安装目录没有更改。先激活 Microsoft Office,然后执行下列…

Unity Canvas的三种模式

一、简介: Canvas的Render Mode一共有三种模式:Screen Space -OverLay、Screen Space-Camera、World Space Screen Space - Overlay(屏幕空间 - 覆盖): 这是最简单的 Canvas 渲染模式。UI 元素在这个模式下将渲染在屏…

web CSS笔记1

CSS(Cascading Style Sheets) 美化样式 CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及…

栅格地图路径规划:基于霸王龙优化算法(Tyrannosaurus optimization,TROA)的机器人路径规划(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

【云开发笔记No.7】敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的软件开发方法。它起源于20世纪90年代初期,由一些软件行业的先驱者提出,旨在解决传统软件开发过程中存在的一些问题,如需求变化频繁、开发周期长、成本高等。敏捷开发强调团队合作、客户需求和快速…

那些王道书里的题目-----计算机网络篇

注:仅记录个人认为有启发的题目 p155 34.下列四个地址块中,与地址块 172.16.166.192/26 不重叠,且与172.16.166.192/26聚合后的地址块不会引入多余地址的是() A.172.16.166.192/27 B.172.16.166.128/26 …

目标检测中的mAP计算原理和源码实现

简介 在目标检测任务中,mAP(mean Average Precision,平均精度均值)是一个非常重要的评价指标,用于衡量模型在多个类别上的平均性能。它综合考虑了模型在不同召回率下的精确率,能够全面反映模型在检测任务中…

Matlab|【免费】智能配电网的双时间尺度随机优化调度

目录 1 主要内容 基础模型 2 部分代码 3 部分程序结果 4 下载链接 1 主要内容 该程序为文章《Two-Timescale Stochastic Dispatch of Smart Distribution Grids》的源代码,主要做的是主动配电网的双时间尺度随机优化调度,该模型考虑配电网的高效和安…

计算机网络——25Internet-Protocol

Internet Protocol 互联网中的网络层 主机、路由器中的网络层功能 IP数据报格式 项目说明ver版本号,如Ipv4就是0100head len头部的长度,一般头部是20个字节(也就是上图中的5行),但是也有可选项,也就是头部是变长的,因…

【C语言】指针基础知识(二)

一,指针变量类型的意义 1,指针的类型决定了,对指针解引⽤的时候有多⼤的权限(⼀次能操作⼏个字节)。 例如:char* 的指针解引⽤访问⼀个字节,int* 的指针解引⽤访问四个字节,short*…

[SAP MM] 名词专业术语解释

采购凭证 采购凭证通常是一种证明文件,用于记录和跟踪特定时间点的采购活动 采购凭证是指企业在采购物品或服务时所开立的一种凭证,用于记录采购的信息和流程 采购凭证通常包括采购申请、采购订单、采购合同等,其中采购订单是最常用的采购…

C语言UNIX域套接字CS模型

实验目标: 1 实现基于流的unix域套接字通信cs模型 2 实现基于数据报的unix域套接字通信cs模型 3 可以观察到CS两端的完整启动退出流程,为了实现这一目标仅进行一次通信 实验心得: 1 使用unlink避免地址冲突 清理资源 2 传统udp在首次sendto时系统临时分配端口,在套接字关…

周末分享一篇关于html和http的文章吧

前面咱们说了https://blog.csdn.net/luohaitao/article/details/136974344(说道说道JSP和HTTP吧-CSDN博客),把http的方法和jsp中httpservle对象的方法对上号了,其实从开发的角度看,jsp就是html中混入了java的服务端代码…

Rust并发编程thread多线程和channel消息传递

安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。 并发(concurrent)的概念是指程序不同的部分独立执行,这与并行(parallel)的概念容易混淆,并行强调的是"同…

DNS、DNS劫持与HTTPDNS:原理、应用与安全分析

文章目录 一、DNS原理和应用1.1 原理1.2 应用 二、DNS劫持的场景和原因分析2.1 场景2.2 原因分析 三、HTTPDNS的应用场景3.1 应用场景3.2 HTTPDNS服务商 四、总结 一、DNS原理和应用 DNS(Domain Name System,域名系统)是互联网的一项核心服务…

人工智能之Tensorflow批标准化

批标准化(Batch Normalization,BN)是为了克服神经网络层数加深导致难以训练而诞生的。 随着神经网络的深度加深,训练会越来越困难,收敛速度会很慢,常常会导致梯度消失问题。梯度消失问题是在神经网络中,当前…

chatgpt和 github copilot chat哪个更强

chatgpt大家应该都不陌生 ChatGPT 是由 OpenAI 开发的一种基于 GPT(生成式预训练模型)的聊天机器人。它可以生成语言上下文相关的响应,从而进行自然语言对话。ChatGPT 利用大规模的语言数据进行预训练,并通过微调或在线学习来适应…

【云开发笔记No.12】再说测试

一、自动化测试 自动化测试是软件开发过程中的重要环节,旨在通过自动化工具来执行测试用例,从而验证软件的功能、性能、安全性等方面是否符合预期。自动化测试能够显著提高测试效率,减少人为错误,并持续监控软件的质量。 关键技…

微服务(基础篇-002-Ribbon)

目录 Ribbon负载均衡(1) 负载均衡的原理(1.1) 负载均衡策略(1.2) Ribbon-IRule(1.2.1) 修改负载均衡的方法(1.2.2) 懒加载(1.3) 饥饿加载(1…

ES聚合查询

ES聚合查询 {"query": {"bool": {"must": [{"terms": {"orderId": ["58880570952990","58882596943998","58880654706404"]}},{"term": {"billType": "110"}…