信号处理--使用CNN+LSTM实现单通道脑电信号EEG的睡眠分期评估

目录

背景

亮点

环境配置

数据

方法

结果

代码获取

参考文献


背景

睡眠对人体健康很重要。监测人体的睡眠分期对于人体健康和医疗具有重要意义。

亮点

  • 架构在第一层使用两个具有不同滤波器大小的 CNN 和双向 LSTM。 CNN 可以被训练来学习滤波器,以从原始单通道 EEG 中提取时不变特征,而双向 LSTM 可以被训练来将时间信息(例如睡眠阶段转换规则)编码到模型中。
  • 实现了一种两步训练算法,可以通过反向传播有效地端到端训练我们的模型,同时防止模型遭受大睡眠中出现的类别不平衡问题(即学习仅对大多数睡眠阶段进行分类) 数据集。
  • 在不改变模型架构和训练算法的情况下,模型可以从两个数据集的不同原始单通道脑电图自动学习睡眠阶段评分的特征,这两个数据集具有不同的属性(例如采样率)和评分标准( AASM 和 R&K)。

环境配置

  • python3.5.4
  • tensorflowgpu  1.15.2

数据

Sleep-EDF

MASS

方法

 模型主要代码:

class MyModel(DeepFeatureNet):def __init__(self, batch_size, input_dims, n_classes, seq_length,n_rnn_layers,return_last,is_train, reuse_params,use_dropout_feature, use_dropout_sequence,name="deepsleepnet"):super(self.__class__, self).__init__(batch_size=batch_size, input_dims=input_dims, n_classes=n_classes, is_train=is_train, reuse_params=reuse_params, use_dropout=use_dropout_feature, name=name)self.seq_length = seq_lengthself.n_rnn_layers = n_rnn_layersself.return_last = return_lastself.use_dropout_sequence = use_dropout_sequencedef _build_placeholder(self):# Inputname = "x_train" if self.is_train else "x_valid"self.input_var = tf.compat.v1.placeholder(tf.float32, shape=[self.batch_size*self.seq_length, self.input_dims, 1, 1],name=name + "_inputs")# Targetself.target_var = tf.compat.v1.placeholder(tf.int32, shape=[self.batch_size*self.seq_length, ],name=name + "_targets")def build_model(self, input_var):# Create a network with superclass methodnetwork = super(self.__class__, self).build_model(input_var=self.input_var)# Residual (or shortcut) connectionoutput_conns = []# Fully-connected to select some part of the output to add with the output from bi-directional LSTMname = "l{}_fc".format(self.layer_idx)with tf.compat.v1.variable_scope(name) as scope:output_tmp = fc(name="fc", input_var=network, n_hiddens=1024, bias=None, wd=0)output_tmp = batch_norm_new(name="bn", input_var=output_tmp, is_train=self.is_train)# output_tmp = leaky_relu(name="leaky_relu", input_var=output_tmp)output_tmp = tf.nn.relu(output_tmp, name="relu")self.activations.append((name, output_tmp))self.layer_idx += 1output_conns.append(output_tmp)####################################################################### Reshape the input from (batch_size * seq_length, input_dim) to# (batch_size, seq_length, input_dim)name = "l{}_reshape_seq".format(self.layer_idx)input_dim = network.get_shape()[-1].valueseq_input = tf.reshape(network,shape=[-1, self.seq_length, input_dim],name=name)assert self.batch_size == seq_input.get_shape()[0].valueself.activations.append((name, seq_input))self.layer_idx += 1# Bidirectional LSTM networkname = "l{}_bi_lstm".format(self.layer_idx)hidden_size = 512   # will output 1024 (512 forward, 512 backward)with tf.compat.v1.variable_scope(name) as scope:def lstm_cell():cell = tf.compat.v1.nn.rnn_cell.LSTMCell(hidden_size,                               use_peepholes=True,state_is_tuple=True,reuse=tf.compat.v1.get_variable_scope().reuse) if self.use_dropout_sequence:keep_prob = 0.5 if self.is_train else 1.0cell = tf.compat.v1.nn.rnn_cell.DropoutWrapper(cell,output_keep_prob=keep_prob)return cellfw_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell([lstm_cell() for _ in range(self.n_rnn_layers)], state_is_tuple = True)bw_cell = tf.compat.v1.nn.rnn_cell.MultiRNNCell([lstm_cell() for _ in range(self.n_rnn_layers)], state_is_tuple = True)# Initial state of RNNself.fw_initial_state = fw_cell.zero_state(self.batch_size, tf.float32)self.bw_initial_state = bw_cell.zero_state(self.batch_size, tf.float32)# Feedforward to MultiRNNCelllist_rnn_inputs = tf.unstack(seq_input, axis=1)#outputs, fw_state, bw_state = tf.nn.bidirectional_rnn(outputs, fw_state, bw_state = tf.compat.v1.nn.static_bidirectional_rnn(cell_fw=fw_cell,cell_bw=bw_cell,inputs=list_rnn_inputs,initial_state_fw=self.fw_initial_state,initial_state_bw=self.bw_initial_state)if self.return_last:network = outputs[-1]else:network = tf.reshape(tf.concat(axis=1, values=outputs), [-1, hidden_size*2],name=name)self.activations.append((name, network))self.layer_idx +=1self.fw_final_state = fw_stateself.bw_final_state = bw_state# Append outputoutput_conns.append(network)####################################################################### Addname = "l{}_add".format(self.layer_idx)network = tf.add_n(output_conns, name=name)self.activations.append((name, network))self.layer_idx += 1# Dropoutif self.use_dropout_sequence:name = "l{}_dropout".format(self.layer_idx)if self.is_train:network = tf.nn.dropout(network, keep_prob=0.5, name=name)else:network = tf.nn.dropout(network, keep_prob=1.0, name=name)self.activations.append((name, network))self.layer_idx += 1return networkdef init_ops(self):self._build_placeholder()# Get loss and prediction operationswith tf.compat.v1.variable_scope(self.name) as scope:# Reuse variables for validationif self.reuse_params:scope.reuse_variables()# Build modelnetwork = self.build_model(input_var=self.input_var)# Softmax linearname = "l{}_softmax_linear".format(self.layer_idx)network = fc(name=name, input_var=network, n_hiddens=self.n_classes, bias=0.0, wd=0)self.activations.append((name, network))self.layer_idx += 1# Outputs of softmax linear are logitsself.logits = network######### Compute loss ########## Weighted cross-entropy loss for a sequence of logits (per example)loss = tf.contrib.legacy_seq2seq.sequence_loss_by_example([self.logits],[self.target_var],[tf.ones([self.batch_size * self.seq_length])],name="sequence_loss_by_example")loss = tf.reduce_sum(loss) / self.batch_size# Regularization lossregular_loss = tf.add_n(tf.compat.v1.get_collection("losses", scope=scope.name + "\/"),name="regular_loss")# print " "# print "Params to compute regularization loss:"# for p in tf.compat.v1.get_collection("losses", scope=scope.name + "\/"):#     print p.name# print " "# Total lossself.loss_op = tf.add(loss, regular_loss)# Predictionsself.pred_op = tf.argmax(self.logits, 1)

结果

睡眠分期效果图

MASS数据集分类表

代码获取

后台私信 1

参考文献

K. Wulffet al., “Sleep and circadian rhythm disruption in psychiatric and neurodegenerative disease,”Nature Reviews Neuroscience, vol. 11, no. 8, pp. 589–599, 2010.

C. S. Huanget al., “Knowledge-based identification of sleep stages based on two forehead electroencephalogram channels,”Frontiers in Neuroscience, vol. 8, p. 263, 2014.

N. Srivastavaet al., “Dropout : A Simple Way to Prevent Neural Networks from Overfitting,”J. of Machine Learning Research, vol. 15, pp. 1929–1958, 2014.

B. Kempet al., “Analysis of a sleep-dependent neuronal feedback loop: The slow-wave microcontinuity of the EEG,”IEEE Trans. Biomed. Eng., vol. 47, no. 9, pp. 1185–1194, 2000.

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

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

相关文章

redis缓存(穿透, 雪崩, 击穿, 数据不一致, 数据并发竞争 ), 分布式锁(watch乐观锁, setnx, redission)

redis的watch缓存机制 WATCH 机制原理: WATCH 机制:使用 WATCH 监视一个或多个 key , 跟踪 key 的 value 修改情况,如果有key 的 value 值在事务 EXEC 执行之前被修改了,整个事务被取消。EXEC 返回提示信息,表示 事务已…

Linux安装,配置,启动HBase

Linux安装,配置,启动HBase 一、HBase安装,配置 1、下载HBase安装包 Hbase官方下载地址: http://archive.apache.org/dist/hbase 选择相应的版本点击下载,这里以2.3.5为例 # linux可以通过wget命令下载 wget https://archive…

Windows11安装FFmpeg最新版本

打开终端: 输入 winget install ffmpeg 然后输入 Y 回车后出现如下图: 正在下载FFmpeg 6.1 安装成功 测试

STM32CubeIDE基础学习-STM32CubeIDE软件配置下载器方法

STM32CubeIDE基础学习-STM32CubeIDE软件配置下载器方法 文章目录 STM32CubeIDE基础学习-STM32CubeIDE软件配置下载器方法前言第1章 配置ST-LINK下载器第2章 配置DAP下载器总结 前言 这个软件编译完之后,可以使用下载器进行在线下载程序或仿真调试程序,也…

050-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

050-WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒 #知识点: 1、文件包含-原理&分类&危害-LFI&RFI 2、文件包含-利用-黑白盒&无文件&伪协议 演示案例: ➢文件包含-原理&分类&am…

设计模式(工厂模式)

设计模式(工厂模式) 一、工厂模式介绍 在工厂模式中,父类决定生成示例的方式,但不决定所要生成的具体的类,具体的处理部分交给子类负责。这样就可以将生成示例的框架和生成示例的类解耦。 二、示例程序 以下示例程…

力扣-数组题

1. 两数之和 找出map中是否有target-nums[i]&#xff0c; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> hash;for(int i 0 ;i < nums.size(); i){if(hash.find(target - nums[i]) ! hash…

MongoDB安装教程(附带安装包)

目录 解压安装包 傻瓜式安装 选择安装目录 安装完成 启动验证 验证成功 解压安装包 选择所需要的进行安装 傻瓜式安装 选择安装目录 安装完成 启动验证 mongod --dbpathD:\mongodb\data\db 验证成功

VUE_自适应布局lib-flexible+postcss-pxtorem、lib-flexible + postcss-px2rem,nuxt页面自适配

lib-flexible postcss-pxtorem适配 我采用的是flexable.js和postcss-pxtorem。我一开始用的是postcss-px2rem后来发现和nuxt引入公共css的时候发生了冲突所以改用了postcss-pxtorem。 安装依赖 npm i lib-flexible -S npm install postcss-pxtorem --save 1、lib-flexible.…

FreeRTOS学习笔记——列表和列表项及其API函数讲解

目录 精华总结&#xff1a; 列表和列表项 架构脑图&#xff1a; 列表和列表项的简介 列表的结构 列表项 迷你列表项 列表和列表项的关系 FreeRTOS 列表和列表项相关 API 函数 架构脑图&#xff1a; 列表和列表项相关 API 函数 函数 vListInitialise() 函数 vListIni…

IR 召回测试数据集(中文测试集)——T2Ranking

文章排名包括两个阶段&#xff1a;文章检索和文章重排序&#xff0c;这对信息检索&#xff08;IR&#xff09;领域的学术界和业界来说都是重要而具有挑战性的课题。然而&#xff0c;常用的文章排名数据集通常集中在英语语言上。对于非英语场景&#xff0c;如中文&#xff0c;现…

云犀首款AI直播调参大模型重磅发布,智能破解直播三大难!

3月7日晚&#xff0c;云犀重磅发布首款AI大模型——云犀墨子AI直播调参大模型&#xff01;据悉云犀墨子是一款懂直播的调参大模型&#xff0c;这项技术深度融合了机器学习、计算机视觉以及进步的图像处理算法&#xff0c;赋予直播间画面AI智能调控能力。 此次云犀墨子AI直播调参…

Imagination大学计划 rv-fpga实验安装教程及注意事项

1. 实验环境安装 1.1 vivado 2019.2 网盘链接&#xff1a;Vivado_2019.2.tar.gz_免费高速下载|百度网盘-分享无限制 (baidu.com) 安装教程&#xff1a; 网盘中vivado文件夹下载到本地后解压打开&#xff0c;导航到下图&#xff0c;打开xsetup.exe文件。如果打开后有小弹窗直接…

论文阅读之Multimodal Chain-of-Thought Reasoning in Language Models

文章目录 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果总结 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reasoning in Language Models》主要内容进行介绍。 摘要 大型语言模型&#xff08;LLM…

重生奇迹mu战士大师技能加点怎么加

1、在重生奇迹MU中&#xff0c;战士大师的技能加点需要根据个人的游戏风格和需求来决定。一般来说&#xff0c;战士大师可以优先加点力量和体力&#xff0c;以增加攻击和生存能力。同时&#xff0c;可以适当加点敏捷来提高闪避和命中率。 2、在技能方面&#xff0c;可以根据个人…

数组的内存执行原理

一.Java内存分配介绍 JVM虚拟机会在内存中执行程序 java内存分配介绍 方法区&#xff0c;栈&#xff0c;堆 首先将编译过后的.class文件送入方法区中。当类开始运行时将方法调入栈内存中&#xff0c;变量也是属于方法的&#xff0c;因此同方法一起进入栈内存中。当main方法要…

Word背景图片设置,提升文章美观度的4个小技巧!

“我才刚开始使用Word&#xff0c;想问问大家Word中背景图片应该怎么设置呢&#xff1f;有什么比较好用的设置方法可以分享一下吗&#xff1f;” 在日常办公中&#xff0c;我们经常需要使用Word来对文件进行处理。在编写Word时&#xff0c;如果给文档加入背景图片&#xff0c;会…

[pcie]通过sysfs访问PCI设备资源

通过sysfs访问PCI设备资源 参考文档&#xff1a; https://www.kernel.org/doc/html/next/translations/zh_CN/PCI/sysfs-pci.html

直播相机,AI纪元!云犀首款AI直播相机重磅发布!

3月7日晚&#xff0c;云犀重磅发布首款AI直播相机-云犀智瞳Pro&#xff01;据悉该相机内置了云犀首款AI直播调参大模型&#xff0c;能够通过AI分析智能调节直播间参数&#xff0c;赋予直播间画面AI智能调控能力。 云犀AI直播相机&#xff0c;让直播更简单 此次云犀AI直播相机的…

企业业务在ERP系统中的流程分析

ERP系统能将企业的信息流、资金流、物流等进行统一管控&#xff0c;并且可以通过它优化企业的业务流程。本文主要介绍企业的一些业务在ERP中的流程设置。 首先是销售管理业务&#xff0c;销售管理以销售部门为核心&#xff0c;仓库、财务部门为辅助&#xff0c;偶尔需要生产、质…