首页 > 编程知识 正文

卷积神经网络预测模型,卷积神经网络图像识别原理

时间:2023-05-06 04:50:55 阅读:130224 作者:2285

将机械振动信号基于一维卷积神经网络分类预测*采用一维卷积神经网络训练振动信号分为两类

2020年7月16日,第一学期没等到开学,又放假了。

总览CSDN大多数卷积神经网络对二维图像进行分类,但图像也是常见的猫狗分类,属于minst手写数字分类。 卷积神经网络的使用非常少见,也可分为IDMB情感分类和鸢尾。

作者就读于河北省双飞,在全国排名第270多位。 哈哈,不吹也不吹。

在网上查也找不到可以用来研究我的机器故障诊断的代码,但是之后,没办法只能去某个宝藏搜索代码,使用了。 这段代码是对鸢尾进行改造后分类的,直观性强,本人天资愚钝的人很容易得到。 通常直接访问代码。

importnumpyasnpimportpandasaspdfromsklearn.preprocessingimportlabelencoderfromsklearn.preprocessingimportstandardscalerfrorfrorn ufflesplitfromkeras.modelsimportsequentialfromkeras.layersimportdense,Activation,Flatten,Flatten MaxPooling1D, btchnormalizationfromkeras.optimizersimportsgdfromkeras.utilsimportnp _ utilsfromkeras.modelsimportload _ model train USS 培训集test=PD.read _ CSV (c :/users/PC/desktop/导入100test.CSV ' )的test ) : label _ encoder=label encoder (.fit (train.species ) labels=label _ encoder.) n=train.drop(['species ',' id'],axis=1) test=test.drop ),axis=1)返回train,labels,t train claseses test ) scaled_train=train.values# SSS将每个数据集的30%用作测试SSS=stratifiedshufflesplit ) test_sizlit valid _ indexinsss.split (scaled _ train,labels ) : X_train,x _ valin scaled _ train [ valid _ index ] y _ train labels [ valid _ index ] nb _ features=64nb _ class=len (classes ) # reshape train data这里的128稍微强调了一下,64*2=128,数据在此,为什么,我们要在代码下详细介绍x_train _ r=NP.zeros ((len (x _ train ),nb_features,3 ) ) x _ train? nb _ features 3360128 ] x _ train _ r [ 128: ] print (x _ train _ r ) reshapevalidationdatax _ valid _ r=NP.zeratid 3360 nb _ features ] x _ valid _ r [ :1 ]=x _ valid [ :nb _ features 3360128 ] x _ valid _ r [ 12365292;

用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 = 150model.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 pdimport numpy as npfrom sklearn.preprocessing import StandardScalerfrom keras.models import load_model,Sequentialfrom keras.layers import Dense, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalizationc = 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 10 0.99957 0.0004303161 0.001092350.9989082 0.999585 0.0004145413 0.0143072 0.9856934 0.999522 0.0004783745 0.999482 0.0005177296 0.002368260.9976327 0.154483 0.8455178 0.999583 0.0004171159 0.999579 0.00042068510 0.02490350.97509711 0.999566 0.00043419112 0.001060620.99893913 0.999545 0.00045485214 0.999595 0.00040493715 0.63731 0.3626916 0.003561410.99643917 0.006216460.99378318 0.999571 0.00042914519 0.99954 0.00045966

其中0代表信号中的bad,1代表信号中的good
数据在没测试前的标签如下图

选择的是2-21行,这样就是20个样本进行验证。可以看出预测的和原本的不太一致,预测过程中将第一行直接转移到了最后一行,奇奇怪怪令人不解,其中还有个预测的概率为0.6多。这样就在研究我的课题时变相的迈了一小步。

细心的朋友可能早就发现,本人将代码里的归一化,标准化删除了,哈哈哈,卖个乖,本人的研究中发现了一种标准化方法,还在测试阶段,不一定理想。所以将数据直接用matlab归一化和标准化好了。图片中的数据使用的用每个值减去最小值除以最大值得来的。虽然做起来麻烦,但是这样做的好处倒也是有的,那就是在测试的程序中不用再添加训练时的归一化标准化程序。往往在训练的程序中进行归一化处理,再到预测程序中进行归一化,往往得到一些奇奇怪怪的预测结果。
数据集的连接:
https://pan.baidu.com/s/18rkiU9gROfSMQhZ5nDzEsg
提取码sbun
永久有效
第一次写博客分享研究生一年来,做出的丁点成果。希望看过这篇帖子的同志在下面评论,共同学习,共同进步。我导师带研究生在3届,然而研三rqdxgz半年没见到就毕业了。研二rqdxgz做老师的另外一个课题。老师赴美学习被堵到了国外。这学上的稀里糊涂,难受的丫批。
有问题评论区指出,共同讨论,本人虚心受教

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。