信号处理--卷积残差网络实现单通道脑电的睡眠分期监测

目录

背景

亮点

环境配置

数据

方法

结果

代码获取

参考文献


背景

人类大约花三分之一的时间睡觉,这使得监视睡眠成为幸福感的组成部分。 在本文中,提出了用于端到端睡眠阶段的34层深残留的Convnet架构

亮点

使用深度1D CNN残差架构,用于端到端分类, 可以解决训练更深的CNN模型引起的消失梯度问题。 

环境配置

python; tensorflow

数据

Sleep-EDF

方法

使用三十层卷积神经残差网络,实现睡眠分期检测。

主要代码:

 

def res_first(input_tensor, filters=(64,64), kernel_size=16, dropout_rate=0.2, bias=False, maxnorm=4., **kwargs):
    eps = 1.1e-5
    nb_filter1, nb_filter2 = filters
    x = Conv1D(filters=nb_filter1, kernel_initializer=initializers.he_normal(seed=1), kernel_size=kernel_size,
               padding='same', use_bias=bias, kernel_constraint=max_norm(maxnorm))(input_tensor)  ##
    x = BatchNormalization(epsilon=eps, axis=-1)(x)
    x = Scale(axis=-1)(x)
    x = Activation('relu')(x)
    x = Dropout(rate=dropout_rate, seed=1)(x)
    x = Conv1D(filters=nb_filter2, kernel_initializer=initializers.he_normal(seed=1), kernel_size=kernel_size,
               padding='same', use_bias=bias, kernel_constraint=max_norm(maxnorm))(x)  ##
    x = add([x, input_tensor])
    return x


def MyModel(eeg_length=3000, kernel_size=16, bias=False, maxnorm=4., **kwargs):

    '''
    Top model for the CNN
    Add details of module in docstring
        '''

    eps = 1.1e-5

    #inputs = K.placeholder(shape=(batch_size, eeg_length,1))
    #x = Input(dtype= 'float32', shape=(eeg_length,1))
    EEG_input = Input(shape=(eeg_length,1))
    x = Conv1D(filters=64, kernel_size=kernel_size, kernel_initializer=initializers.he_normal(seed=1), padding='same',
               use_bias=bias, kernel_constraint=max_norm(maxnorm))(EEG_input)  ##
    x = BatchNormalization(epsilon=eps, axis=-1)(x)
    x = Scale(axis=-1)(x)
    x = Activation('relu')(x)  #  

    x = res_first(x, filters=[64, 64], kernel_size=kernel_size)
    x = res_subsam(x, filters=[64, 64], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[64, 64], kernel_size=kernel_size)
    x = res_subsam(x, filters=[64, 128], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[128, 128], kernel_size=kernel_size)
    x = res_subsam(x, filters=[128, 128], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[128, 128], kernel_size=kernel_size)
    x = res_subsam(x, filters=[128, 192], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[192, 192], kernel_size=kernel_size)
    x = res_subsam(x, filters=[192, 192], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[192, 192], kernel_size=kernel_size)
    x = res_subsam(x, filters=[192, 256], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[256, 256], kernel_size=kernel_size)
    x = res_subsam(x, filters=[256, 256], kernel_size=kernel_size, subsam=2)
    x = res_nosub(x, filters=[256, 256], kernel_size=kernel_size)
    x = res_subsam(x, filters=[256, 512], kernel_size=kernel_size, subsam=2)
    x = BatchNormalization(epsilon=eps, axis=-1)(x)
    x = Scale(axis=-1)(x)
    x = Activation('relu')(x)
    x = Model(EEG_input,x)
    # tf.keras.backend.eval(x)
    return x

 

结果

所有被试数据按照7:3的比例划分为训练和测试集数据,在单个被试在5分类的任务上,准确率达到91.4%,在6分类任务上,准确率达到90.1%。

代码获取

私信后台 S2

参考文献

L. Cen, Z. L. Yu, Y. Tang, W. Shi, T. Kluge, and W. Ser, “Deep learning method for sleep stage classification,” inInt. Conf. Neural Information Processing, 2017, pp. 796–802

M. Mourtazaev, B. Kemp, A. Zwinderman, and H. Kamphuisen, “Age and gender affect different characteristics of slow waves in the sleep eeg,”Sleep, vol. 18, no. 7, pp. 557–564, 1995.

K. He, X. Zhang, S. Ren, and J. Sun, “Identity mappings in deep residual networks,” inProc. ECCV, 2016, pp. 630–645.


http://www.niftyadmin.cn/n/5428489.html

相关文章

JavaScript进阶:js的一些学习笔记

文章目录 1. js作用域2. 函数3. 解构赋值 1. js作用域 作用域规定了变量能够呗访问的范围,离开这个范围,这个变量就不能够被访问到。 局部作用域:可以分为函数作用域和块作用域 块作用域,let 声明会产生块级作用域,va…

【LeetCode热题100】141. 环形链表(链表)

一.题目要求 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置…

MySQL常见的索引类型介绍

我将为您详细讲解 MySQL 中常见的索引类型,以及它们的使用场景、特点、区别和优势。索引是提高数据库查询性能的关键工具,它可以加速数据检索速度,减少服务器的负担。在 MySQL 中,索引类型主要包括 B-Tree 索引、哈希索引、全文索…

Milvus向量数据库检索

官方文档:https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离,并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

pytorch升级打怪(三)

数据集合数据加载器 简介加载数据集迭代和可视化数据集为您的文件创建自定义数据集__init____len____getitem__ 准备您的数据以使用DataLoaders进行训练通过DataLoader进行遍载 简介 处理数据样本的代码可能会变得混乱且难以维护;理想情况下,我们希望我…

kakfa模拟仿真篇之spark-submit在linux运行 (更贴近真实场景)

源码在上篇 地址在这 :Kafka模拟器产生数据仿真-集成StructuredStreaming做到”毫秒“级实时响应StreamData落地到mysql-CSDN博客 这里分享一下一些新朋友不知道spark-submit 指令后 的参数怎么写 看这篇绝对包会 声明: 此项目是基于 maven 打包的说明…

Vue.js+SpringBoot开发APK检测管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

SpringBoot3框架,入门学习

依赖管理机制 导入场景启动器后,会根据maven依赖传递的原理,将这个场景下所有的核心依赖都导入进来每个boot项目都有一个父项目spring-boot-starter-parent,parent的父项目是spring-boot-dependencies,spring-boot-dependencies其…