读取肌电数据,构建模型训练数据
生活随笔
收集整理的這篇文章主要介紹了
读取肌电数据,构建模型训练数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本篇為《信號處理》系列博客的第十一篇,該系列博客主要記錄信號處理相關知識的學習過程和自己的理解,方便以后查閱。
本片博客為用DNN分類肌電數據的準備工作的第二篇,主要內容為,讀取處理后的肌電數據(去噪、提取活動段),并構成訓練數據。
import os import csv import random import numpy as np import matplotlib.pyplot as plt from sklearn import preprocessingdef data_loader(datadir, batch_size=10):'''定義訓練集數據讀取器輸入參數:datadir :數據文件的保存路徑batch_size :每次用于訓練的數據量輸出參數:原始數據+標簽'''def reader():batch_sEMG = []# 定義變量,用于存儲肌電數據圖片batch_labels = []# 定義變量,用于存儲肌電數據標簽label = 0# 標簽變量sEMG = []# 存儲一個肌電數據# 讀取數據,用于訓練for root, dirs, files in os.walk(datadir):if len(root)==len(datadir):# 去除根目錄的文件路徑continuelabel = label+1# 每個子文件夾代表一個類別random.shuffle(files)# 訓練時隨機打亂肌電文件順序# 遍歷每一個文件,一個文件即為一張圖片for sEMG_files in files:# 讀取文件內容,并轉換為圖片with open(root+'/'+sEMG_files) as sEMG_file:# 獲取datadir文件夾下的,子文件夾內的,文件的,內容sEMG_signal = csv.reader(sEMG_file)for row in sEMG_signal:sEMG.append(row)# 對一次采集到的肌電信號進行歸一化,并改變矩陣的形狀sEMG = np.array(sEMG).astype('float32')min_max_scaler = preprocessing.MinMaxScaler()#默認為范圍0~1,拷貝操作sEMG_minmax = min_max_scaler.fit_transform(sEMG)sEMG_minmax = np.delete(sEMG_minmax, -1, axis=0)#刪除最后一行整行,這里matlab代碼沒有寫好,導致數據多了一行sEMG_img = sEMG_minmax.reshape(1, 200, 240)batch_sEMG.append(sEMG_img)batch_labels.append(label)sEMG = []# 變量清零,用于下一次循環if len(batch_sEMG) == batch_size:# 對一次采集到的肌電信號進行歸一化,并改變矩陣的形狀,這里改變形狀的代碼有錯# sEMG = np.array(batch_sEMG).astype('float32')# min_max_scaler = preprocessing.MinMaxScaler()#默認為范圍0~1,拷貝操作# sEMG_minmax = min_max_scaler.fit_transform(sEMG)# sEMG_minmax=np.delete(sEMG_minmax, -1, axis=0)#刪除整行# sEMG_array = sEMG_minmax.reshape(200, 240)# labels_array = np.array(batch_labels).astype('float32').reshape(-1, 1)sEMG_array = np.array(batch_sEMG).astype('float32')labels_array = np.array(batch_labels).astype('float32').reshape(-1, 1)yield sEMG_array, labels_arraybatch_sEMG = []# 變量清零,用于下一次循環batch_labels = []# 變量清零,用于下一次循環if len(batch_sEMG) > 0:# 剩余樣本數目不足一個batch_size的數據,一起打包成一個mini-batchsEMG_array = np.array(batch_sEMG).astype('float32')labels_array = np.array(batch_labels).astype('float32').reshape(-1, 1)yield sEMG_array, labels_arrayreturn reader# 查看數據形狀 DATADIR = '/home/al007/Deep Learing/PaddlePaddle/sEMG' train_loader = data_loader(DATADIR, batch_size=10) data_reader = train_loader() data = next(data_reader) print(data[0].shape, data[1].shape)打印結果:
(10, 200, 240) (10, 1)
總結
以上是生活随笔為你收集整理的读取肌电数据,构建模型训练数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象:实例化的对象调用类方法 db.
- 下一篇: 常见算法详解(原理及代码实现Python