Building and training a deep spiking neural network for ECG classification论文阅读_1d-cnn论文-程序员宅基地

技术标签: SNN  深度学习  人工智能  

Building and training a deep spiking neural network for ECG classification

  1. 提出一种有效的方法来构建和训练用于ECG分类的深度SNN,方法是构建深度ANN的对应结构,转移训练的参数,并将激活函数替换为泄漏的积分和激发(LIF)神经元。结果表明,深度SNN的精度甚至超过了原来的ANN。

  2. 传统ECG分类机器学习方法:SVM LDA

  3. 在本文中,旨在提出一种有效的方法来构建和训练用于ECG分类的深度SNN。首先为心电图分类任务构建和训练深度ANN ,以通过卷积和池化操作捕获心电图特征。然后,设置了一个由与 ANN 层对应的卷积层和池化层组成的深度 SNN,并将训练的参数从 ANN 传输到 SNN。通过这种方式,我们避免了直接训练SNN的难度。最后,为了模拟尖峰神经元,我们对数据进行泊松分布尖峰编码,以生成输入尖峰序列,进行模拟实验并评估性能。

  4. 本文的主要贡献如下:构建并训练了一个用于心电图分类的14层深度SNN模型,这是迄今为止用于心电图相关任务的最深的SNN模型。比较并讨论了不同激活函数对ANN到SNN转换的影响。实验表明,采用ReLU激活函数的ANN变换SNN的准确率达到84.41%,在具有不同激活函数的模型中是最高的。精度与原始 ANN 模型的性能相当(即使 0.35更高)。

  5. 2017年PhysioNet/Computing in Cardiology Challenge的ECG分类ANN模型

  6. 配置 ANN 后,我们设置了一个具有相同基本结构的 SNN。SNN 包含与 ANN 的卷积层、池化层和完全连接层对应的层,但没有丢弃层和批量规范化层。为了接收两种类型层的效果,我们应用参数归一化将每个丢弃层和每个批处理归一化层合并到附近的卷积层中。

  7. 在对 ANN 进行良好训练后,我们将卷积层和池化层的参数传递给 SNN。除了基本结构外, ANN的激活功能全部替换为LIF神经元,如图1所示。我们不仅测试 ReLU,还测试其他类型的激活函数。

  8. 最后,应用泊松分布式尖峰编码和时钟驱动仿真方法,利用SNN实现心电图分类。泊松分布式尖峰编码是将输入信号转换为尖峰序列。它是一种基于速率的编码方法,具有较大的输入值,对应于给定时间窗口中的更多峰值,并且计算符合 Poission 分布。**时钟驱动的仿真方法与事件驱动的仿真方法相对,前者在每个时间步长上更新神经元状态,而后者在峰值到达时更新神经元状态。**在时钟驱动方法下,每个神经元等待特定的时间步长来积累输入尖峰,整个网络建立神经连接所花费的时间步数称为模拟持续时间。我们测试了不同长度的仿真持续时间,以找到合适的仿真时间,以便SNN实现与ReLU的原始ANN相似的分类性能,并将相同的仿真时间应用于所有传输的模型。

  9. 数据集:The dataset of the study is from the 2017 PhysioNet/CinC Challenge。
    数据增强的方法:在这里插入图片描述
    在本文中,通过添加高斯白噪声来实现数据增强,并使用噪声系数来控制添加的噪声。

  10. 采用一维卷积运算来提取ECG信号的特征,因为已经证明一维CNN(1D-CNN)在时间序列分析中表现良好[26]。此外,一些研究表明,SNN可以调整卷积操作,而不会影响ANN到SNN的转换 1*1的卷积核 降维和升维的妙用

  11. 一维卷积通常用于序列模型中,所以在自然语言处理中,通常使用的是一维卷积。1、升维和降维,通常将一维卷积当做全连接使用 2、加入非线性。卷积层之后经过激励层,11 的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力;3、跨通道信息交互(channal 的变换)第一点说的升维和降维通常是通道间的变换,33,64channels 的卷积核前面添加一个 11,28channels 的卷积核,就变成了 33,28channels 的卷积核,原来的 64 个 channels 就可以理解为跨通道线性组合变成了 28channels,这就是通道间的信息交互。

  12. Bodo等人指出,Max Pooling对于尖峰神经元来说并非易事。最大池化在 ANN 中只需要一层,但在 SNN 中需要两层。因此,SNN中需要更多的神经元,导致额外的复杂性和准确性的损失。为了解决这个问题,使用平均池而不是最大池。

  13. 使用四种ReLU,Leaky ReLU,SELU,GELU进行训练,当输入值较小时,ELU具有软饱和度,这提高了对噪声的鲁棒性,而SELU是自规范化的,可用于训练多层深度网络,因为使用SELU学习非常健壮。高斯误差线性单位(GELU)将随机正则化的思想引入激活。GELU通过其值非线性加权输入,而不是像ReLU [18]中那样通过其符号输入门。它在直观上与生物神经元的自然反应一致,并且使用GELU比使用ReLU或ELU获得更好的实验结果是标准高斯累积分布函数。。GELU激活函数的公式如下:其中是标准的高斯累积分布函数。

  14. 我们将参数转移到前面的卷积层。下面的方程显示了批归一化层中的参数(α、β、μ和σ)如何被集成到卷积层的权重和偏差中,这已被证明是一个经验无损操作[37]。在下面的方程中,W和b表示原始卷积层的权重和偏差,而W‘和b’表示新卷积层的包含批标准化信息的权重和偏差。
    在这里插入图片描述

  15. 首先训练一个深度 ANN,损失函数是交叉熵损失,优化器是 Adam 优化器,学习速率设置为 0.0001。 当验证集的准确性开始下降时,通过反向传播进行的模型训练停止。训练epochs为 80。训练深度 ANN 后,我们将网络的参数传输到具有相同基本结构的深度 SNN。通过这种方式,我们获得了一个深度SNN,其中包含经过训练以理解ECG的神经元。为了证明ANN到SNN转换的有效性,我们在同一训练数据集上模拟SNN。采用泊松分布尖峰编码和时钟驱动仿真方法建立峰值网络。在T时间步长之后,每个神经元从输出层的放电频率等于N除以T,其中N是从神经元释放的尖峰数。最后,我们从效率和准确性方面探索ECG分类任务的适当仿真时间,并将仿真时间步长T设置为1000。

  16. 在本研究中,ANN是使用Python(版本3.6.1),PyTorch(版本1.9)和CUDA(版本11.1)实现和训练的。PyTorch提供了一个GPU加速的,基于数组的编程模型,可以通过集成到Python生态系统中的自动差异化来区分。对于SNN,利用SpikingJelly,这是一个开源框架,可以完成从ANN到SNN的转换。SpikingJelly使用PyTorch作为自动区分后端,包括C++和CUDA扩展以增强性能,并支持CPU和GPU。使用SpikingJelly框架,我们基于ANN构建SNN,并使用时钟驱动的方法对其进行模拟。模拟硬件设置是英特尔酷睿(TM)i7-9700F CPU,32 GB RAM和NVIDIA GeForce RTX 2080Ti显卡。

  17. 除了整体性能之外,我们发现使用ReLU比在NORMAL,AF和其他类中使用非ReLU激活函数具有更好的性能。对于 NOISE 类,使用 ReLU 函数的性能不如使用 Leaky ReLU。这可能是因为当x小于零时,Leaky ReLU函数提供微小的负激活值,并且噪声输入为系统带来了动态,从而修补了由微小的负值引起的ANN和SNN之间的差异。
    尽管使用 ReLU 的性能并不总是各种指标的最佳性能,但它在模型转换之前和之后都显示出稳定性。如表 2、表 5 所示,在大多数性能指标中,使用 SELU 的性能不如使用其他激活函数。这与我们的假设一致,即负激活值会导致传输的 SNN 性能较差。SELU函数对于任何小于零的输入都有一个相对较大的负激活值,因此原始ANN中的许多神经元可能通过传播输出负值,其行为与SNN中不产生负输出的神经元不同。因此,使用 SELU 可能会使传输的 SNN 的性能比使用其他激活函数更差。

  18. 我们的工作仍然有一些局限性,以至于我们无法实现最大池化,并且与现有作品相比,我们无法获得最高的分类准确性。在未来的研究中,我们需要找到在SNN中实现最大池化层的解决方案,并探索更多的网络结构进行转换,以提高ECG分类的准确性。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41844449/article/details/124691681

智能推荐

台湾油研功率放大器AMN-D-20T_油研amnd20放大器中文说明书-程序员宅基地

文章浏览阅读424次。控制阀类型有先导溢流阀EDG,比例压力阀EBG,比例减压阀ERBG,10Ω系列比例流量阀EFCG,节能阀10Ω线圈EFBG,10Ω比例线圈用的小型功率放大器,供给电源DC24V.采用新回路方式,低发热功率放大器。_油研amnd20放大器中文说明书

里氏替换原则(Liskov Substitution Principle)_基类出现的地方 子类一定出现-程序员宅基地

文章浏览阅读723次。里氏替换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。简单明了的理解:所用引用基类的地方必须透明地使用其子类的对象。_基类出现的地方 子类一定出现

两个实用的C语言工具———编程学习必备篇_csdn-程序员宅基地

文章浏览阅读4.5k次,点赞17次,收藏8次。两个实用的C语言工具_csdn

Flask、Django、Tornado三大框架的对比_tornado flask di-程序员宅基地

文章浏览阅读3.9k次。前言之前面试的时候我提到过自己有Flask、Django、Tornado框架的使用经验,于是面试官很自然就问到了这三大框架的区别、各自的特点这样的问题。回答了几次总觉得自己回答得不是太好,有些点没有回答到,亦或是逻辑有点混乱,于是想要归纳总结一下。框架的特点FlaskFlask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发..._tornado flask di

简单实现接口自动化测试(基于python)_接口自动化测试怎么写-程序员宅基地

文章浏览阅读9.3k次,点赞21次,收藏192次。一、简介本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。二、引言为什么要做接口自动化测试?在当前互联网产品迭代频繁的背景下,回归测试的时间越来越少,很难在每个迭代都对所有功能做完整回归。但接口自动化测试因其实现简单、维护成本低,容易提高覆盖率等特点,越来越受重视。为什么要自己写框架呢?使用requets + unitt_接口自动化测试怎么写

JavaScript大数运算】实现高精度计算的JavaScript算法_js 用什么类型运算大数据和精度要求高的数据-程序员宅基地

文章浏览阅读104次。总结起来,JavaScript中的大数运算是一个挑战,但通过使用字符串表示大数并手动实现算术运算,或者使用专门的JavaScript库,我们可以实现高精度的数值计算。这为处理更大范围的数值提供了可能,使我们能够在JavaScript中进行各种复杂的数值计算。无论是手动实现算法还是使用现有的库,都能帮助我们在JavaScript中实现高精度计算,处理更大范围的数值。在上述代码中,我们将大数表示为字符串,逐位相加,并处理进位。这样,我们可以避免JavaScript的数值限制,从而实现了高精度的加法运算。_js 用什么类型运算大数据和精度要求高的数据

随便推点

如何设置代理ip服务器地址_代理服务器地址-程序员宅基地

文章浏览阅读711次。代理IP服务器具有很多优点和使用场景,在未来的发展中,随着网络技术的不断进步和应用场景的不断扩展,代理IP服务器将会发挥更加重要的作用。_代理服务器地址

用伪随机生成100个大写字母和100个个位数字_vb生成100个大写字母-程序员宅基地

文章浏览阅读294次。#include#include#includeusing namespace std;void RandomCharacter();void RandomFingure();int main(void){ RandomCharacter(); cout<<

Spring / Spring boot 异步任务编程 WebAsyncTask_spring boot webasynctask-程序员宅基地

文章浏览阅读372次。Spring / Spring boot 异步任务编程 WebAsyncTask今天一起学习下如何在Spring中进行异步编程。我们都知道,web服务器处理请求request的线程是从线程池中获取的,这也不难解释,因为当web请求并发数非常大时,如何一个请求进来就创建一条处理线程,由于创建线程和线程上下文切换的开销是比较大的,web服务器最终将面临崩溃。另外,web服务器创建的处理线程从头到尾默认是同步执行的,也就是说,假如处理线程A负责处理请求B,那么当B没有return之前,处理线程A是不可以脱身去_spring boot webasynctask

uni-app打包成Android Apk 过程详细_uniapp打包apk-程序员宅基地

文章浏览阅读6.5k次。重新运行npm run build:app-plus,生成新的app-plus内容,替换之前的www文件夹里的内容,并且打开里面的manifest.json 应该能看到id已经变成重新获取的appid了。在项目根目录新建一个文件夹,以 src/manifest.json 中的 appid 字段为文件名,然后在文件夹中创建一个 www 目录,将 app-plus 文件夹下的资源拷贝到 www 目录中。在assets右键新建一个文件夹apps,将 3.2 步骤的appid文件夹整个复制到 apps目录下。_uniapp打包apk

【中级软考】软件设计-考试介绍_软件设计师 以考代评 考完就是中级职称-程序员宅基地

文章浏览阅读457次。软件设计中级软考基本内容,通过一下几点进行介绍:1、软考好处2、软件设计证书模版3、流程4、考点分布5、考试形式_软件设计师 以考代评 考完就是中级职称

linux7配网卡,CentOS 7 配置网卡-程序员宅基地

文章浏览阅读60次。VM安装了一个Linux系统CentOS,但是安装后发现ping www.baidu.com 报错 。查了一下发现需要配置网卡。1.首先需要进入目录 /etc/sysconfig/network-scripts这里我的centos的 iso版本是:CentOS-7-x86_64-DVD-1708.iso。进入目录之后可以看到有个ifcfg-ens33的文件。我们需要对这个文件做些修改。2.vi i..._wsl2 centos7 网卡配置