日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一维卷积神经网络案例_matlab 卷积神经网络(一加手机官网)

發布時間:2023/12/24 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 一维卷积神经网络案例_matlab 卷积神经网络(一加手机官网) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于一維卷積神經網絡對機械振動信號進行分類并加以預測

*使用一維卷積神經網絡訓練振動信號進行二分類
2020年7月16日,一學期沒等到開學,然而又放假了。
總覽CSDN中大多數卷積神經網絡都是對二維圖片進行分類的,而圖片也都是常見的貓狗分類,minst手寫數字分類。一維卷積神經網絡的使用非常少見,有也是IDMB情感分類,和鳶尾花分類的。
作者研究生就讀于河北一所雙飛,全國排名270多,哈哈哈,不吹不黑。
在網上翻來翻去找不到一篇可以利用的代碼去研究我的機械故障診斷,后來在無奈下到某寶搜尋到一段代碼,可以利用。這篇代碼是改裝鳶尾花分類的,直觀性較強,對于本人天資愚鈍的人來說入手方便。不多說直接上代碼:

import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import StratifiedShuffleSplit
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalization
from keras.optimizers import SGD
from keras.utils import np_utils
from keras.models import load_model
train = pd.read_csv('C:/Users/pc/Desktop/100train.csv')#導入訓練集
test = pd.read_csv('C:/Users/pc/Desktop/100test.csv')#導入測試集
#這里是代碼的精髓之處,編輯數據集中的標簽,直接使用即可
def encode(train, test):
label_encoder = LabelEncoder().fit(train.species)
labels = label_encoder.transform(train.species)
classes = list(label_encoder.classes_)
train = train.drop(['species', 'id'], axis=1)
test = test.drop('id', axis=1)
return train, labels, test, classes
train, labels, test, classes = encode(train, test)
scaled_train=train.values
# SSS將每個數據集中的30%用作測試
sss = StratifiedShuffleSplit(test_size=0.3, random_state=23)
for train_index, valid_index in sss.split(scaled_train, labels):
X_train, X_valid = scaled_train[train_index], scaled_train[valid_index]
y_train, y_valid = labels[train_index], labels[valid_index]
nb_features = 64    
nb_class = len(classes)
# reshape train data這里的128強調一點,64*2=128,如果數據量大,可以改變nb_feature的大小,同時在這里將128改成nb_feature的2倍,這里為什么這樣,將在代碼下面詳細說明
X_train_r = np.zeros((len(X_train), nb_features, 3))
X_train_r[:, :, 0] = X_train[:, :nb_features]
X_train_r[:, :, 1] = X_train[:, nb_features:128]
X_train_r[:, :, 2] = X_train[:, 128:]
print(X_train_r)
# reshape validation data
X_valid_r = np.zeros((len(X_valid), nb_features, 3))
X_valid_r[:, :, 0] = X_valid[:, :nb_features]
X_valid_r[:, :, 1] = X_valid[:, nb_features:128]
X_valid_r[:, :, 2] = X_valid[:, 128:]
model = Sequential()
model.add(Convolution1D(nb_filter=16, filter_length=64,strides=1, input_shape=(nb_features, 3),padding='same'))
model.add(Activation('tanh'))#在對振動信號,尤其是在對加速度計測得的振動信號時使用tanh是個不錯的選擇
model.add(MaxPooling1D(2,strides=2,padding='same'))
model.add(BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None))
model.add(Convolution1D(32,3,padding='same'))
model.add(Activation('tanh'))
model.add(MaxPooling1D(2,strides=2,padding='same'))
model.add(BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None))
model.add(Flatten())
model.add(Dropout(0.3))
model.add(Dense(100, activation='tanh'))
model.add(Dense(10, activation='tanh'))
model.add(Dense(nb_class))
model.add(Activation('softmax'))
model.summary()
y_train = np_utils.to_categorical(y_train, nb_class)#這里是將數據集中的標簽做成獨熱碼,直接黏貼就好了
y_valid = np_utils.to_categorical(y_valid, nb_class)
sgd = SGD(lr=0.01, nesterov=True, decay=1e-6, momentum=0.9)
model.compile(loss='categorical_crossentropy',optimizer=sgd,metrics=['accuracy'])
nb_epoch = 150
model.fit(X_train_r, y_train, nb_epoch=nb_epoch, validation_data=(X_valid_r, y_valid), batch_size=32)
model.save('fei100_model.h5')#將訓練好的模型保存,不想保存的話可以在代碼前加上#

前十行沒什么可說的,導入亂七八糟的函數,日常不管用不用的到瞎雞導入,不會影響訓練。
這里說明為什么上面將長度為192的代碼分成三個長度為64的在重整成一個三維矩陣加載進第一個卷積層:
在鳶尾花分類的時候是有三大個明顯特征的,這里用長、寬、高代替,因為原本是什么,本人記不清楚了,懶得去查,也不重要了。那么問題來了,這是在訓練振動信號不用將192長的信號再分成三段了,于是本人將代碼進行改變,將原本reshape部分刪除,將第一個卷積層的輸入改成1維,中間過程不堪入目,終于兩天后我放棄了,總是維度有問題,就是無法將(175,192)的數據輸入到(1,192)的卷積層中,然后又將(175,192)的信號曾了個維度還是不行,在此希望成功的小伙伴在下面評論一下,或者把代碼發本人郵箱983401858@qq.com哈哈哈哈。
關于振動信號采用激活函數tanh是因為,本人嘗試了relu,和sigmod但發現,效果并沒有tanh好,為什么不好,同樣好在哪里,就不一一贅述了。

下面,用訓練好的模型去預測新收集到的振動信號,當然了,并沒有真的做實驗去獲得新數據,是從原有數據中摘取出一部分。預測用的代碼如下:

import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from keras.models import load_model,Sequential
from keras.layers import Dense, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalization
c = pd.read_csv('C:/Users/pc/Desktop/10000.csv')
a=np.array(c)
b=a.reshape(-1,64,3)
model=Sequential()
model = load_model("fei100_model.h5")
predict=model.predict(b)

吶,這就基本上完成了。
本人簡單的貼一下預測結果

    0              1
0 0.99957   	0.000430316
1 0.00109235	0.998908
2 0.999585	    0.000414541
3 0.0143072  	0.985693
4 0.999522	    0.000478374
5 0.999482   	0.000517729
6 0.00236826	0.997632
7 0.154483  	0.845517
8 0.999583  	0.000417115
9 0.999579  	0.000420685
10 0.0249035	0.975097
11 0.999566 	0.000434191
12 0.00106062	0.998939
13 0.999545 	0.000454852
14 0.999595	    0.000404937
15 0.63731	    0.36269
16 0.00356141	0.996439
17 0.00621646	0.993783
18 0.999571 	0.000429145
19 0.99954	    0.00045966

其中0代表信號中的bad,1代表信號中的good
數據在沒測試前的標簽如下圖

選擇的是2-21行,這樣就是20個樣本進行驗證。可以看出預測的和原本的不太一致,預測過程中將第一行直接轉移到了最后一行,奇奇怪怪令人不解,其中還有個預測的概率為0.6多。這樣就在研究我的課題時變相的邁了一小步。

細心的朋友可能早就發現,本人將代碼里的歸一化,標準化刪除了,哈哈哈,賣個乖,本人的研究中發現了一種標準化方法,還在測試階段,不一定理想。所以將數據直接用matlab歸一化和標準化好了。圖片中的數據使用的用每個值減去最小值除以最大值得來的。雖然做起來麻煩,但是這樣做的好處倒也是有的,那就是在測試的程序中不用再添加訓練時的歸一化標準化程序。往往在訓練的程序中進行歸一化處理,再到預測程序中進行歸一化,往往得到一些奇奇怪怪的預測結果。
數據集的連接:
https://pan.baidu.com/s/18rkiU9gROfSMQhZ5nDzEsg
提取碼sbun
永久有效
第一次寫博客分享研究生一年來,做出的丁點成果。希望看過這篇帖子的同志在下面評論,共同學習,共同進步。我導師帶研究生在3屆,然而研三師兄半年沒見到就畢業了。研二師兄做老師的另外一個課題。老師赴美學習被堵到了國外。這學上的稀里糊涂,難受的丫批。
有問題評論區指出,共同討論,本人虛心受教

總結

以上是生活随笔為你收集整理的一维卷积神经网络案例_matlab 卷积神经网络(一加手机官网)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。