利用神经网络对脑电图(EEG)降噪------开源的、低成本、低功耗微处理器神经网络模型解决方案
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能
这个示例展示了如何使用EEGdenoiseNet基准数据集[1]和深度学习回归去除脑电图(EEG)信号中的眼电图(EOG)噪声。EEGdenoiseNet数据集包含4514个干净的EEG片段和3400个眼部伪迹片段,这些片段可以用来合成带有真实干净EEG的噪声EEG片段
这个示例使用干净和受EOG污染的EEG信号来训练一个长短期记忆(LSTM)模型以去除EOG伪迹。首先,将在原始输入信号上训练模型。然后,引入短时傅里叶变换(STFT)层,使模型在原始输入上提取时频特征进行训练。逆STFT层从去噪的STFT重构结果。使用时频特征特别是在信噪比(SNR)较低时可以提高性能。
EEGdeniseNet数据集包含4514个干净的EEG片段和3400个EOG片段,可用于生成三个数据集,用于训练、验证和测试深度学习模型。所有信号段的采样率为256Hz。实例为MATLAB语言。
% Download the data
datasetZipFile = matlab.internal.examples.downloadSupportFile("SPT","data/EEGEOGDenoisingData.zip");
datasetFolder = fullfile(fileparts(datasetZipFile),"EEG_EOG_Denoising_Dataset");
if ~exist(datasetFolder,"dir")
unzip(datasetZipFile,fileparts(datasetZipFile));
end
下载数据后,datasetFolder中的位置包含两个MAT文件:
EEG_all_epochs.mat 干净EEG数据
EOG_all_epochs.mat (EOG)数据
将干净的EEG和EOG信号相结合,生成具有不同信噪比(SNR)的有噪声EEG数据与干净的EEG数据构成训练数据,并且分成训练、验证和测试数据集。
绘制有噪声EEG数据与干净的EEG数据
显然,传统的任何算法很难将EEG数据从噪声中滤出来。
定义神经网络结构,之所以选择长短期记忆(LSTM)架构,是因为它能够从时间序列中学习特征。
numFeatures = 1;
numHiddenUnits = 100;
layers = [
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
dropoutLayer(0.2)
fullyConnectedLayer(numFeatures)
];
设置训练参数
maxEpochs = 5;
miniBatchSize = 150;
options = trainingOptions("adam", ...
Metrics="rmse", ...
MaxEpochs=maxEpochs, ...
MiniBatchSize=miniBatchSize, ...
InitialLearnRate=0.005, ...
GradientThreshold=1, ...
Plots="training-progress", ...
Shuffle="every-epoch", ...
Verbose=false, ...
ValidationData=ds_Validate_T, ...
ValidationFrequency=100, ...
OutputNetwork="best-validation-loss");
模型执行的效果
提高深度学习模型性能的常用方法是使用输入信号数据的特征进行训练。这些特征提供了输入数据的表示,这使得网络更容易学习信号的最重要方面。
选择窗口长度为64个样本、重叠长度为63个样本的短时傅立叶变换(STFT)。这种转换将有效地创建33个复杂特征,每个特征的长度为449个样本。
winLength = 64;
overlapLength = 63;
data = preview(ds_Train_T);
plotSTFT(data,winLength,overlapLength)
定义神经网络
minLen=512; % signal length
numFeatures=66; % number of features
win=rectwin(winLength); % analysis window
layers = [
sequenceInputLayer(1,MinLength=minLen)
stftLayer(Window=win,OverlapLength=overlapLength,transform="realimag")
lstmLayer(numHiddenUnits)
dropoutLayer(0.2)
fullyConnectedLayer(numFeatures)
istftLayer(Window=win,OverlapLength=overlapLength)
];
训练网络
if trainingFlag == "Train networks"
stftNet = trainnet(ds_Train_T,layers,"mse",options);end
网络性能
利用神经网络对脑电图(EEG)降噪------开源的、低成本、低功耗微处理器神经网络模型解决方案的更多相关文章
- 利用神经网络算法的C#手写数字识别(二)
利用神经网络算法的C#手写数字识别(二) 本篇主要内容: 让项目编译通过,并能打开图片进行识别. 1. 从上一篇<利用神经网络算法的C#手写数字识别>中的源码地址下载源码与资源, ...
- 利用神经网络算法的C#手写数字识别(一)
利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...
- 利用Tensorflow实现卷积神经网络模型
首先看一下卷积神经网络模型,如下图: 卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC池化层:为了减少运算量和数据维度而设置的一 ...
- 利用Tensorflow实现神经网络模型
首先看一下神经网络模型,一个比较简单的两层神经. 代码如下: # 定义参数 n_hidden_1 = 256 #第一层神经元 n_hidden_2 = 128 #第二层神经元 n_input = 78 ...
- 【TensorFlow/简单网络】MNIST数据集-softmax、全连接神经网络,卷积神经网络模型
初学tensorflow,参考了以下几篇博客: soft模型 tensorflow构建全连接神经网络 tensorflow构建卷积神经网络 tensorflow构建卷积神经网络 tensorflow构 ...
- SAP开源的持续集成-持续交付的解决方案
SAP开源的持续集成/持续交付的解决方案: (1) 一个叫做piper的github项目,包含一个针对Jenkins的共享库和一个方便大家快速搭建CI/CD环境的Docker镜像: (2) 一套SAP ...
- 利用神经网络算法的C#手写数字识别
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwritten_character_recognition.zip 下载源码 - 70. ...
- 利用神经网络进行网络流量识别——特征提取的方法是(1)直接原始报文提取前24字节,24个报文组成596像素图像CNN识别;或者直接去掉header后payload的前1024字节(2)传输报文的大小分布特征;也有加入时序结合LSTM后的CNN综合模型
国外的文献汇总: <Network Traffic Classification via Neural Networks>使用的是全连接网络,传统机器学习特征工程的技术.top10特征如下 ...
- 如何利用神经网络和Python生成指定模式的密码
今天给大家介绍的是Github上一个名叫PyMLProjects的项目,这个项目的目的是为了训练AI来学习人类构造密码的模式,然后我们就可以用AI来生成大量同一模式或种类的密码了.这种方法也许可以用来 ...
- Fragment利用ViewPager实现左右滑动--第三方开源--SlidingTabLayout和SlidingTabStrip实现
MainActivity: package com.zzw.fragmentteb; import java.util.ArrayList; import android.graphics.Color ...
随机推荐
- 连接Windows 平台 KingbaseES异常
概述 应用连接Windows平台的KingbaseES 数据库,报错"com.kingbase8.util.KSQLException: 致命错误: 用户"system" ...
- 【已解决】同时使用ajax和form表单传数据的冲突问题
昨天踩了一个大坑,下面总结一下: 前后端数据交互的两种方式: 1.ajax发起请求(请求中可以带有数据)并获取返回的数据 下面给出一个ajax的常见格式: 1 $.ajax({ 2 url:" ...
- LeetCode 3093. 最长公共后缀查询 (二分法)
LeetCode 3093. 最长公共后缀查询 1 题目描述 给你两个字符串数组 wordsContainer 和 wordsQuery . 对于每个 wordsQuery[i] ,你需要从 word ...
- 10 CSS边框属性
10 CSS边框属性 border-style(边框风格) 定义边框的风格,值可以有: /* none:没有边框,当border的值为none的时候,系统将会忽略[border-color] hidd ...
- CentOS 9 安装 Nginx 模块 `subs_filter`
sub_filter 和 subs_filter 区别 sub_filter( 0.7.24):替换响应体(Response Body)中的文本,只能设置一组替换. subs_filter:替换响应体 ...
- C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++ 字符串 字符串用于存储文本. 一个字符串变量包含由双引号括起来的一组字符: 示例 创建一个 string 类型的变量并为其赋值: string greeting = "Hello&q ...
- Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间
Java 用户输入(Scanner) 简介 Scanner 类用于获取用户输入,它位于 java.util 包中. 使用 Scanner 类 要使用 Scanner 类,请执行以下步骤: 导入 jav ...
- openGauss 列存表PSort索引
openGauss 列存表 PSort 索引 概述 PSort(Partial sort) Index 是在列存表的列上建的聚簇索引.CUDesc 上有每个 CU 的 min 和 max 值,但如果业 ...
- 【Python3.10.4】Centos7 ,centos8,centos9源码安装 python3.10.4 解释器
1.检查是否安装wget如果没有安装则: 终端执行: yum -y install wget 2.下载python3源码包 终端执行: wget https://www.python.org/ftp/ ...
- React中类组件和函数组件
一.类组件 类组件,顾名思义,也就是通过使用ES6类的编写形式去编写组件,该类必须继承React.Component 如果想要访问父组件传递过来的参数,可通过this.props的方式去访问 在组件中 ...