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

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)

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SER论文阅读:SPEECH EMOTION RECOGNITION WITH CO-ATTENTION BASED MULTI-LEVEL ACOUSTIC INFORMATION

论文:https://arxiv.org/abs/2203.15326 代码:https://github.com/vincent-zhq/ca-mser Title: SPEECH EMOTION RECOGNITION WITH CO-ATTENTION BASED MULTI-LEVEL ACOUSTIC INFORMATION 题目:基于共注意的多层次声学信息语音情感识别 语音…

【英语演讲】Informative Speech

写在前面: 本专栏用于收纳我本学期在《英语演讲》课上的present的所有演讲文稿,一来是记录文案防止在自己电脑上误删了hh(虽然成功传上来我可能就立马会删掉orz),二来是方便大家学习与交流(啦)。…

动画对话框实现

炫酷的动画对话框 关键技术 AlertDialog的自定义 代码 //创建对话框实例dlg new AlertDialog.Builder(this).create();dlg.show(); //显示对话框Window window dlg.getWindow(); //获取对话框窗口window.setGravity(Gravity.CENTER); …

chatgpt智能提效职场办公-ppt怎么蒙层

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在 PowerPoint 中添加蒙版图层,可以在幻灯片中创建一个半透明的矩形或形状,并在其上方添加或放置其他对象。 下…

作文批改网如何粘贴英语作文

批改网的英语作文不允许被粘贴的话,下面提供四种办法使用复制粘贴功能:   1。移除监听事件即可开启 在浏览器中打开,鼠标右键选择检查,或者按快捷键F12打开调试窗口 点击Console 输入以下代码: $(#contents).…

ChatGPT实战100例 - (01) 秒出思维导图

文章目录 ChatGPT实战100例 - (01) 秒出思维导图一、需求与思路1. 需求:快速的头脑风暴2. 思路:生成markdown然后转化嗯 二、生成markdown语法的思维导图1. 问题2. 回答 三、把markdown文本转换成思维导图1. 转换2. 下载 ChatGPT实战100例 - (01) 秒出思…

ChatGPT解答:PYQT5 的mwindow源码文件里面写了很多的函数方法,随着时间的推移越来越多,代码行数太多,影响了性能,如何解决

ChatGPT解答: PYQT5 的mwindow源码文件里面写了很多的函数方法,随着时间的推移越来越多,代码行数太多,影响了性能,如何解决 以下为可复制的内容与实例: PYQT5 的mwindow源码文件里面写了很多的函数方法&a…

如何正确定位自己,并婉拒多的offer

前言 如果你采用了前文介绍的方法,也拿到了多家公司的offer。那么选择困难的时候,就需要你正确定位自己,做出决策。这时,你也要想明白你到底是要什么。我推荐给你的方法是...... 1. 正确定位自己 在自己评估自己的时候&#xff0c…

程序员找工作竟遭25家公司的婉拒!网友:真心佩服他的勇气~

每个人的追求不一样,也许是因为我本身是一个没有野心的人,所以比较容易知足,不太愿意花那么多的时间和精力去追逐功名利禄,但是最近看到下面这个程序员网友的经历使我燃气了熊熊的欲望之火 可见,这名程序员的坚持并没有…

10岁女程序员,婉拒谷歌 Offer ,凭实力影响着所有年轻人!

点击上方“开源社”关注我们 | 转载自:核桃编程教育 | 编辑:王皓月 | 责编:Corrie 开源社引言 这是一个全民编程的时代,这是一个不分岁月创造奇迹的时代。继82岁程序员若宫正子独立开发 iPhone 手游、90后美女张怡从小白到AI算法工…

罗永浩重返科技圈,却故人难寻

阅读本文大概需要 2.6 分钟。 宣布年后就会回归科技界的时候,罗永浩自己可能都没想到,这个回归之路比预想的要漫长一些。 在进军 AR/VR 之前,他得重回讲台,卖直播培训课。虽然只是撑场面,每期只讲一个半小时&#xff0…

现代C++的文艺复兴

广播分享下2022全球C及系统软件技术大会盛会,不知道的可以提前关注下。 鉴于上海疫情发展,全球C及系统软件技术大会预计推迟至2022年5月20-21日举办。 2022全球C及系统软件技术大会 | 官方网站 本文是全球 C 及系统软件技术大会联合主席李建忠老师为C…

我们公司没销售 - 疫情下企业软件的互联网营销

瘟疫似乎没完没了了,两年前写的文章,现在看起来竟然还有意义,再翻出来改改。 说到没销售,其实有很多商业形态都没有销售人员,运转得都挺好,这没什么可大惊小怪的。 不过,我们是个做企业软件的公…

42岁码农今年找工作记录

作者:胡说 | 编辑:对白的算法屋 https://zhuanlan.zhihu.com/p/461526410 给自己记录一下。32岁的时候还在硅谷大厂做架构师,35岁的时候回国在阿里P8,然后自己任性的去挑战各种奇葩的方向。现在一个大型外企里面做着一些不疼不痒的…

代码随想录算法公开课!

关注代码随想录的录友,基本都是跟着代码随想录一起刷题的。 目前代码随想录的内容是完全开放在代码随想录网站,Github,和Gitee上,同时也出版了《代码随想录》纸质版。 这套刷题顺序和题解帮助了非常多的录友。 而现在我打算将《…

广州搬砖第三年,从一枚小菜鸡到架构师

theme: cyanosis 前言 在广州搬砖三年,我觉得蛮有意思的,真真正正有所成长的,也让我从一名小菜鸡成长为一名架构师,当然中间也遇到很多艰辛,当我回过头去看的时候,这些都是我成长的垫脚石,雕刻…

35岁程序员面试时被嫌弃年纪大,被婉拒了,太扎心了

老张是一名java程序员,35岁,有丰富的开发经验。 最近老张到一家互联网创业公司面试,去面试前,张工在电话里就先和HR表明自己的期望薪资范围,免得最后技术面通过了,而薪资方面达不到要求,浪费彼此…

计算机研究生考426分单科多少,考研初试426分,第一名的成绩,只因为是跨考,却被老师婉拒?...

某个考生,考研初试426分,第一名的成绩,只因为是跨考,却被老师婉拒? 跨专业考研到底又有多难? 最近,有个江苏南京的家长,拿着这张图片来问我,是不是说跨专业考研的学生&am…

一个 SAP 开发工程师的 2022 年终总结:四十不惑

儿时对于一年四季,我最中意的便是冬季,因为冬季意味着即将到来的寒假,可以回到老家,和多日不见的玩伴们痛痛快快玩上一段时间。冬季也总是和春节联系在一起,过年就意味着可以从长辈那拿到一笔压岁钱,把自己…

程序员加班回家,被快递小哥误当小偷

(给程序员的那些事加星标) 综合自:浙视频、微博 【导读】:最近有个和程序员相关的视频火了,一快递小哥(小董)在深夜投快递时遇上一位加班到深夜回家的程序员,由于快递小哥不了解程序…