基于Tensorflow深度学习的ECG身份识别方法(二)
基于Tensorflow深度學習的ECG身份識別方法(一)
基于Tensorflow深度學習的ECG身份識別方法(二)
基于Tensorflow深度學習的ECG身份識別方法(三)
一、前言
????上一篇粗略展示了訓練結果以及開發環境的搭建流程,本篇將介紹數據獲取以及數據處理過程。
二、數據獲取
????首先貼一下數據來源 https://www.physionet.org/cgi-bin/atm/ATM,該網站上 MIT-BIH Arrhythmia Database 數據庫有 48 條雙導聯 ECG 數據,采樣頻率為 360hz(1 秒采樣 360 個點)。但是由于其數據結構比較復雜,仔細琢磨其中的讀取方法無疑增加了本次小項目的難度。所以本著拿來主義的原則,在網上找到了大神們寫好的 matlab 代碼,經過小小的修改,將數據庫中第一導聯的數據轉換成文本格式分別存下來,這樣方便后續在 python 中處理。保存的文件已上傳,點此下載,設置了1積分下載,若是沒積分的童鞋可留下郵箱發給你。
三、數據處理
????經過第二步的數據處理,得到了48個文件,每個文件中包含648000個數據。但是顯然我們并不需要這么多數據。我在前面幾次訓練時,每個樣本中取的數據是1080x500,然后在神經網絡中將輸入數據1080變成360x3,迭代大概30次,這樣訓練的準確率其實很高,印象中有97%左右,但是比較耗時(CPU跑深度學習的速度真是不敢恭維,建議有條件的童鞋還是裝GPU版本的tensorflow)。后來就干脆取少一點數據,每個樣本取360x60個數據,要迭代50次左右,準確率大概93%。反正是按需處理數據吧,如果只是像我一樣簡單研究下可以取少量數據去做,如果是要做實際項目或者是其他對準確度要求比較高的東西還需要考慮很多問題,比如去噪、采樣時間等問題。
????好了,步入正題,上面講了ECG數據庫被我用Matlab讀取并存放成了文本格式,這里講一下這個保存的文件在python中怎么處理。先貼代碼
#!/usr/bin/env python3 # -*- coding: utf-8 -*-import redata_len = 360 * 1#每個樣本個數 data_num = 60 Name_whole = [100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115,116, 117, 118, 119, 121, 122, 123, 124, 200, 201, 202, 203, 205, 207, 208, 209,210, 212, 213, 214, 215, 217, 219, 220, 221, 222, 223, 228, 230, 231, 232, 233, 234]class EcgHandle(object):def __init__(self):passdef read_from_matlab(self):passdef read_from_uart(self):passdef read_from_file(self, file_name):self.ecg = list()with open(file_name, 'r') as f:file_list = f.readline()aList = re.findall('([-+]?\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?', file_list) # 使用正規表達式搜索字符串for ss in aList:aNum = float((ss[0] + ss[2]))self.ecg.append(aNum)index = []data = []for i in range(len(self.ecg) - 1):X = float(i)Y = float(self.ecg[i])index.append(X)data.append(Y)mintime = 0maxtime = mintime + len(data) + 1return (index[mintime:maxtime], data[mintime:maxtime])def Pywt_methord(self):passif __name__ == '__main__':Ecg_object = EcgHandle()train_x = []train_y = []lable = 0for i in Name_whole:(x, y) = Ecg_object.read_from_file(PATH + str(i))for j in range(data_num):train_x.append(y[j * data_len:(j + 1) * data_len])#將數據存入train_x中train_y.append(lable)#將標簽存入train_y中lable = lable + 1????代碼就是將matlab中保存的文件讀取一部分出來,存放在 train_x 這個 list 中,train_y是數據對應的標簽,每一個文件對應一個唯一數字,一個文件取 60 組數據,這 60 組數據就有 60 個相同的標簽。
如果你說數據讀取你也不想讀,也行,我有上傳讀取出來序列化保存的文件。點此下載,同樣是1積分,沒積分的留郵箱。文件下載后幾行代碼就搞定了。代碼如下,記得修改下PATH為文件存放路徑,PATH最后的斜杠要多加一個轉義。
四、數據劃分
????做那么多事才把數據終于把心心念念的數據讀出來了,共 60 x 48 = 2880 組數據,接下來要把這些數據劃分為訓練集和測試集。先貼代碼。
train_num = 2700#訓練數據大小Indices = np.arange(len(train_x)) # 隨機打亂索引 np.random.shuffle(Indices)Data_x = train_x Data_y = train_y train_x = np.array(Data_x)[Indices[:train_num ]] train_y = np.array(Data_y)[Indices[:train_num ]] test_x = np.array(Data_x)[Indices[train_num :]] test_y = np.array(Data_y)[Indices[train_num :]]????代碼很簡單,把 2880 組數據先隨機打亂索引,然后取2700組數據當做訓練集,剩下的180組當做測試集,用于后續模型評估。
五、小結
????本篇介紹了數據讀取、轉換、劃分,下一篇會介紹一維cnn網絡搭建。至此米已經準備好了,煮成熟飯也不遠了。
——>下一篇
總結
以上是生活随笔為你收集整理的基于Tensorflow深度学习的ECG身份识别方法(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10系统cpu内核或逻辑核心缺少缺
- 下一篇: 自学成才秘籍!机器学习深度学习经典资料汇