CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-癫痫发作预测(六)

  • 导入需要的包
  • 各功能模块
  • 数据集导入
  • 模型训练
  • 训练结果
  • 保存模型
  • 测试结果

导入需要的包

import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
import tensorflow as tf
import pandas as pd
from sklearn.preprocessing import StandardScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Activation,Flatten
from tensorflow.keras.layers import Conv2D,MaxPooling2D,ZeroPadding2D
from tensorflow.keras.layers import Reshape
from tensorflow.python.keras.utils.multi_gpu_utils import multi_gpu_model
from sklearn.metrics import confusion_matrix
import os

各功能模块

def choose_channel(data, drop=set()):return data[:, :, list(channels), :]def train_test_split(data, label):return train_data, train_label, test_data, test_labeldef get_model(n, channel_numbers):model = keras.models.Sequential([# 1. define matrix:[ input_dim, output_dim]# 2. input:[None, input_length, 1(one_hout:vocab_size)]  return:[None, input_length, embedding_dim]# keras.layers.Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=max_length),# return : [None, embedding_dim]keras.layers.Conv2D(filters=32, kernel_size=(1,channel_numbers), input_shape=(n,channel_numbers,5), activation='relu', padding='same'),keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.MaxPool2D(pool_size=(2,2)),keras.layers.Conv2D(filters=64, kernel_size=(3,9), activation='relu', padding='same'),keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.MaxPooling2D(pool_size=(2,2)),keras.layers.Conv2D(filters=128, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.Conv2D(filters=128, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.MaxPooling2D(pool_size=(2,2)),keras.layers.Conv2D(filters=256, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.Conv2D(filters=256, kernel_size=(3,3), activation='relu', padding='same'),#     keras.layers.MaxPooling2D(pool_size=(2,2)),keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.Conv2D(filters=512, kernel_size=(3,3), activation='relu', padding='same'),keras.layers.Reshape(( -1, 512)),keras.layers.Bidirectional(keras.layers.LSTM(units=512, return_sequences=True)),keras.layers.Bidirectional(keras.layers.LSTM(units=512, return_sequences=True)),keras.layers.Bidirectional(keras.layers.LSTM(units=1024, return_sequences=False)),keras.layers.Flatten(),keras.layers.Dropout(0.5),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(64, activation='relu'),keras.layers.Dense(2, activation='softmax')])return model

数据集导入

path_d = "test_data/data/"
path_l = "test_data/lab/"
d = np.load(path_d+"chb01.npy")
l = np.load(path_l+"chb01.npy")
d = d[:8000]
l = l[:8000]
print(d.shape,l.shape)

模型训练

def get_score(data, label, drop=set(), batch_size=80, epochs=30):data_droped = choose_channel(data, drop=drop)train_data, train_label, test_data, test_label = train_test_split(data_droped, l)data_train = tf.data.Dataset.from_tensor_slices((train_data,train_label)).shuffle(10).batch(batch_size, drop_remainder=True)data_test = tf.data.Dataset.from_tensor_slices((test_data,test_label)).shuffle(10).batch(batch_size, drop_remainder=True)model = get_model(data_droped.shape[1],data_droped.shape[2])
#     parallel_model = multi_gpu_model(model, gpus=8)
#     parallel_model.compile(
#             optimizer=tf.keras.optimizers.SGD(learning_rate=1e-4, momentum=0.9),
#     #         optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
#             loss=tf.keras.losses.sparse_categorical_crossentropy,
#     #         loss=tf.keras.losses.binary_crossentropy,
#     #         metrics=[tf.keras.metrics.sparse_categorical_accuracy],
#             metrics=["accuracy"],
#     #         loss_weights=[1, 5, 20, 1],
#     #         metrics=METRICS
#     )
#     history = parallel_model.fit(data_train, epochs=epochs, batch_size=batch_size, validation_data=data_test,validation_freq=1)
#     score = parallel_model.evaluate(data_test)model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=1e-4, momentum=0.9),#         optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),loss=tf.keras.losses.sparse_categorical_crossentropy,metrics=["accuracy"], )history = model.fit(data_train, epochs=epochs, batch_size=batch_size, validation_data=data_test,validation_freq=1)
#     score = model.evaluate(data_test)
#     del model, data_train, data_test, train_data, train_label, test_data, test_label, data_dropedreturn model, history

model.summary()

训练结果

model, history = get_score(d, l)

保存模型

model.save('model/chb##')

测试结果

train_len = int(len(d) * 0.8)
test_data = d[train_len:]
test_label = l[train_len:]predict_y = model.predict(test_data, batch_size=256)
TN, FP, FN, TP = confusion_matrix(predict_y[:, 1]>0.5, test_label).ravel()
# Sensitivity, hit rate, recall, or true positive rate
TPR = TP/(TP+FN)
# Specificity or true negative rate
TNR = TN/(TN+FP)
# Precision or positive predictive value
PPV = TP/(TP+FP)
# Negative predictive value
NPV = TN/(TN+FN)
# Fall out or false positive rate
FPR = FP/(FP+TN)
# False negative rate
FNR = FN/(TP+FN)
# False discovery rate
FDR = FP/(TP+FP)precision = TP / (TP+FP)  # 查准率
recall = TP / (TP+FN)  # 查全率print(TPR, TNR, precision, recall, FDR, FPR)


CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-癫痫发作预测(六)相关推荐

  1. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五)

    CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-通道选择(五) 概述 通道选择模型 通道选择 LightGBM模块代码 LightGBM模型训练 概述 由于癫痫发作时不是整个大脑区域都有相关的反映 ...

  2. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(二)

    主要内容 1.数据提取 2.制作数据样本-数据分快 3.过程展示 1.数据提取 本次教程以chb01患者的数据为例: 首先提取该患者的eeg数据: 在数据提取中就完成滤波:(0~50Hz) from ...

  3. CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理-2D-CNN(四)

    主要内容 1.数据提取 2.提取过程 1.数据提取 本次教程做适用于整体数据集上的处理工作,以不同的的处理代码展示整体的数据处理! 本次数据处理教程是没有做STFT变换,之间将提取的数据变换为适合2D ...

  4. 基于头皮脑电的癫痫分类

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 根据百度百科,癫痫(epilepsy)即俗称的"羊角风"或"羊癫风",是大脑神经 ...

  5. 手把手教你EEG脑电数据预处理-操作篇

    目录 导入数据 对数据进行初步认识 电极定位 移除无用电极 重参考 重采样 滤波 分段和基线校正 插值坏导 ICA 剔除ICA成分 剔除坏段 目视检查法 保存数据 本分享为脑机学习者Rose整理发表于 ...

  6. 手把手教你EEG脑电数据预处理-原理篇

    目录 0. EEG data 1. 定位通道数据 2. 删除无用数据 3.滤波 4.分段 5.基线校正 6. 重参考 7. 降低采样率 8. 插值坏导 9. 独立主成分分析 10. 剔除坏段 本分享为 ...

  7. Analyzer脑电数据处理步骤

    Analyzer脑电数据处理步骤 1 简化版流程 2 详细版流程 2.1 设置数据路径的workspace 2.2 转换参考(New Reference 2.3 滤波(Filters) 2.4 ICA ...

  8. Python中FIR滤波和STFT滤波对比(MNE脑电数据处理)

    在脑电数据处理中滤波是很重要的一个步骤,直接影响后面的特征提取等计算流程.在之间写的博客中有过介绍(https://blog.csdn.net/zhoudapeng01/article/details ...

  9. 正常脑电与癫痫脑电信号特点

    1. 脑电信号特点 脑电活动是由大脑皮层神经元产生的自发的.节律性的电位变化,常用EEG表示.脑电信号是一种时变的非平稳信号.背景噪声强.是极其微小的电活动,信号幅度微弱,幅度为5uV左右,最大为10 ...

最新文章

  1. C++primer笔记之关联容器
  2. 华为服务器万兆网卡驱动型号,华为万兆光模块型号参数大全
  3. oracle php 配置,PHP + Oracle的配置
  4. GDCM:生成标准SOP类的测试程序
  5. 当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....
  6. ubuntu14.04使用MySQL数据库安装配置Hive 1.2.1
  7. jeecgboot 前端环境搭建_如何从零开始搭建前端监控平台?
  8. Windows切换窗口
  9. 【数据分享】中国城市统计年鉴_2001-2021年
  10. D-S envidence theory(DS 证据理论)的基本概念和推理过程
  11. 我的iPad/iPhone App推荐列表
  12. 自动化 夏令营 保研
  13. 4K显示器在M1上打开HiDPI
  14. “荣耀10X”更名背后的现实逻辑与未来风暴
  15. u)dym)l$_@3*0y3u_pvy@34ky1co1j$lfd1wp-w*8x%30@f7t$
  16. 用传感器建立地球中枢神经系统可预警天灾
  17. RSD的面向任务有何不同——任务目录
  18. 计算机网络路由器配置实验怎么做,计算机网络路由器配置实验
  19. 公网视频流访问之webrtc-streamer
  20. 【IOS】自己写的一个舒尔特方格app

热门文章

  1. oracle数据库数据传输
  2. php链接echarts教程,图文详解echarts的使用方法(饼状图实例)
  3. <polymorphism>
  4. 涛思数据TDengine启动报错,提示localEp is different from localhost.localdomain:6030
  5. TC358762,MIPI 转 RGB,高清分辨率,支持墨水屏
  6. python 椭圆曲线加法_椭圆曲线密码学简介(一):实数域的椭圆曲线及其群运算规则...
  7. python 申请内存_python内存分配
  8. 【Linux Socket 编程入门】06 - 拉个骡子溜溜:UDP编程模型代码分析
  9. 《塔木德智慧全书》摘要(之一)
  10. java基于springboot +vue的图书馆图书借阅系统 nodejs前后端分离