【4】基于深度神经网络的脑电睡眠分期方法研究(训练模型)
生活随笔
收集整理的這篇文章主要介紹了
【4】基于深度神经网络的脑电睡眠分期方法研究(训练模型)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在將原始數據打亂并分成訓練集和驗證集之后,進行訓練模型,本文是十二層的卷積結構,實驗過程中可調batch size、epoch、優化參數等,輸出為分類準確率和分類損失率的折線圖
# In[1]: import os import shutiltrain_dir = r'C:\Users\10133\Desktop\bishe\matlab\traintest\train' test_dir = r'C:\Users\10133\Desktop\bishe\matlab\traintest\test'#導入訓練集和驗證集# In[2]建立結構 from keras import layers from keras import modelsmodel = models.Sequential() # 由Sequential model定義的Keras model.add(layers.Conv2D(32, (5, 5), padding='same', activation='relu',input_shape=(32, 32, 3))) # 卷積層 (samples, timesteps,features) model.add(layers.MaxPooling2D(2, 2)) # 池化層 (samples, features)model.add(layers.Conv2D(64, (5, 5), padding='same', activation='relu')) # 卷積層 model.add(layers.MaxPooling2D(2, 2)) # 池化層model.add(layers.Conv2D(128, (5, 5), padding='same', activation='relu')) # 卷積層 model.add(layers.MaxPooling2D(2, 2)) # 池化層model.add(layers.Conv2D(128, (5, 5), padding='same', activation='relu')) # 卷積層 model.add(layers.MaxPooling2D(2, 2)) # 池化層model.add(layers.Flatten()) # 多維輸入一維化 model.add(layers.Dense(512, activation='relu')) # 全連接層 512個神經元 激活函數Relu model.add(layers.Dropout(0.4)) # 正則化 model.add(layers.Dense(5, activation='softmax')) # 返回,輸出四個類別的概率 數組 總和為1 model.summary()# In[3] from keras import optimizers import kerasmodel.compile(loss='categorical_crossentropy', # 損失函數optimizer=optimizers.Adam(lr=1e-4), # 優化參數metrics=['acc']) # 度量指標# In[4]:數據讀取 數據預處理from keras.preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator(rescale=1. / 255) test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory( # 訓練路徑directory=train_dir,target_size=(256, 256),batch_size=4, # 將數據分解成小批量,訓練過程中這個參數應該保持一致 )test_generator = test_datagen.flow_from_directory( # 測試路徑directory=test_dir,target_size=(256, 256),batch_size=4, )# In[5]:訓練模型,對model.fit()的調用返回一個history對象 包含在訓練期間發生的所有事情的數據num_of_train_samples = 158 num_of_test_samples = 39 batch_size =4 epochs = 10#迭代次數,訓練過程中的所有迭代次數應該是一樣的history = model.fit(train_generator,steps_per_epoch=num_of_train_samples // batch_size,epochs=epochs,validation_data=test_generator,validation_steps=num_of_test_samples // batch_size)# In[6]:#history有四個關鍵詞 用來繪制圖像 import numpy as np from pylab import mpl import matplotlib.pyplot as plt from matplotlib.font_manager import _rebuild_rebuild() mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = Falseacc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss']epochs = range(len(acc))def smooth_curve(points, factor=0.8): # 查看loss曲線 利用代碼實現在TensorBoard里面的將曲線變平緩的功能smoothed_points = []for point in points:if smoothed_points:previous = smoothed_points[-1]smoothed_points.append(previous * factor + point * (1 - factor))else:smoothed_points.append(point)return smoothed_pointsplt.plot(epochs, acc, color='red', marker='o', label='Training acc') plt.plot(epochs, val_acc, color='blue', marker='d', label='Validation acc') plt.annotate('精度{0}'.format(np.max(val_acc)), xy=(np.argmax(val_acc), np.max(val_acc)),arrowprops=dict(facecolor="orange", shrink=0.05), fontsize=10, color='black') # plt.title('矩陣圖') plt.xlabel('迭代次數/次', verticalalignment='top', fontsize=12) plt.ylabel('精度/%', horizontalalignment='right', fontsize=12) plt.legend()plt.savefig(r'C:\Users\10133\Desktop\bishe\matlab\分類準確率.jpg') plt.figure()plt.plot(epochs, loss, color='red', marker='o', label='Training loss') plt.plot(epochs, val_loss, color='blue', marker='p', label='Validation loss') # plt.title('矩陣圖') plt.xlabel('迭代次數/次', verticalalignment='top', fontsize=12) plt.ylabel('損失/%', horizontalalignment='right', fontsize=12) plt.savefig(r'C:\Users\10133\Desktop\bishe\matlab\分類損失率.jpg') plt.legend()plt.show()# In[7]:acc = history.history['acc'] val_acc = history.history['val_acc'] loss = history.history['loss'] val_loss = history.history['val_loss']# 存儲模型訓練精度 steps = [] for i in range(1, 11):steps.append(str(i)) steps = list(map(int, steps))import numpy as np import xlwt# 創建工作薄,但是好像運行的時候表單一直沒有出來過 book = xlwt.Workbook()# 創建表單 sheet1 = book.add_sheet(u'sheet1', cell_overwrite_ok=True)for i in range(epochs):sheet1.write(i, 0, steps[i])sheet1.write(i, 1, val_acc[i])sheet1.write(i, 2, acc[i])sheet1.write(i, 3, loss[i])sheet1.write(i, 4, val_loss[i])# sheet1.write(11,1,str(loss_test))# sheet1.write(11,2,str(acc_test)) # 保存文件 book.save(r'C:\Users\10133\Desktop\bishe\matlab\分類訓練值.xls')總結
以上是生活随笔為你收集整理的【4】基于深度神经网络的脑电睡眠分期方法研究(训练模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dempster证据理论python复现
- 下一篇: DSP技术