首页 > 编程知识 正文

一维卷积神经网络论文,卷积神经网络用什么软件实现

时间:2023-05-04 09:41:29 阅读:130298 作者:3547

一维卷积神经网络直接训练mat文件(基于TICNN )

什么叫荒谬?

凯斯西储的轴承故障数据集太荒谬了

哈佛大学研究生张伟提出的TICNN一维卷积神经网络正解率高的数据和Loss小的数据。

参考文献:

[1]魏章,川号里,高粱蓬,袁汉陈, zujun zang.adeepconvolutionalneuralnetworkwithnewtrainingmethodsforbearingfaultdiagnosisundernoisyenvironmentandiferentwongmetwor

[2]张伟.基于卷积神经网络的轴承故障诊断算法研究[D] .哈尔滨工业大学,2017 .

更糟的两年了。 我用EXCEL做滑动窗函数来增强数据。 哪里的话。

今天,我终于不再使用excel增强数据了

不用说,代码会掀起一波浪潮:

导入tensorflow as TF #将tensor flow命名为tffromkeras.modelsimportsequential #, 导入分类标签显示工具from keras.utils import np_utils,plot_model#,读取序列函数from keras.wrappers.sci kit _ learnimportkeras 部分编辑函数froms klearn.preprocessingimportlabelencoder #是否要导入单独热? 部分编辑函数from keras.layers import Dense,SeparableConv1D,LSTM,Convolution1D,Dropout,MaxPooling1D,BatchNormalization, globalaveragepooling 1d # from keras.modelsimportload _ model #,例如卷积层、所有连接层导入保存模型工具保存from keras.modelsimportmodel _ from _ js oom模型的工具import matplotlib.pyplot as plt#绘图工具froms klearn.metricsiiion 这是from keras import layers#部署层from keras.optimizers import SGD# 忘记的优化程序importnumpyasnpimportscipy.ioasscioimportpandasaspddata1=scio.load mat ((c :/users/1/desktop/105 ) ) ) ) )的数据2=scio.load mat (c :/users/1/desktop/106 ) ) x106_de_time )密钥鞘存储大学的承载故障数据集(字典格式)包含多个密钥,因此Buchang (3360 p=len (数据) L=list ) (I ) %int ) buchang )==03360 return la=ber (data1,1024,6 ) L1=np.array(a ) x,y,z=L1.shapec=L1.) 6 ) L2=NP.Array(b ) XX,YY,ZZ=L2.shapec=L2.reshape ) XX,YY ) k=NP.Zeros ) ) 1kk=NP.hstack axis=2) #即使每行的1-1024列为训练数据y=L3 [ 3360,1024列的标签为汉字,也可以进行训练。 否则,不能encoder=LabelEncoder () y _ encoded=encoder.fit _ transform ) y_onehot=NP_tils.to_co_

_encoded) #划分数据集X_train, X_test, Y_train, Y_test = train_test_split(X, Y_onehot, test_size=0.3, random_state=0)#这一行的意思是,从读入的数据集中拿出30%作为测试集,剩下70%作为训练集。 #卷积过程定义model = Sequential()#使用序列函数,让数据按照序列排队输入到卷积层model.add(Convolution1D(16, 64,strides=16,padding='same', input_shape=(1024, 1),activation='tanh'))#第一个卷积层model.add(Dropout(0.5))#将经过第一个卷积层后的输出数据按照0.5的概率随机置零,也可以说是灭活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))#添加批量标准层,将经过dropout的数据形成正太分布,有利于特征集中凸显,里面参数不需要了解和改动,直接黏贴或者删去均可。model.add(MaxPooling1D(2,strides=2,padding='same'))#添加池化层,池化核大小为2步长为2,padding数据尾部补零。池化层不需要设置通道数,但卷积层需要。model.add(Convolution1D(32,3,padding='same',activation='tanh'))#第二个卷积层,第二个卷积层则不在需要设置输入数据情况。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))#SeparableConv1Dmodel.add(Convolution1D(64, 3,padding='same',activation='tanh'))#第三个卷积层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(MaxPooling1D(2,strides=2,padding='same'))model.add(Convolution1D(64, 3,padding='same',activation='tanh'))#第四个卷积层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(MaxPooling1D(2,strides=2,padding='same'))model.add(Convolution1D(64,3,padding='same',activation='tanh'))#第五个卷积层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(MaxPooling1D(2,strides=2,padding='same'))model.add(Convolution1D(64,3,padding='same',activation='tanh'))#第六个卷积层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(MaxPooling1D(2,strides=2,padding='same'))model.add(Flatten())#将经过卷积和池化的数据展平,具体操作方式可以理解为,有n个通道的卷积输出,将每个通道压缩成一个数据,这样展评后就会出现n个数据model.add(Dense(100))model.add(Dense(2, activation='softmax',name='b'))#最后一层的参数设置要和标签种类一致,而且激活函数采取分类器softmaxprint(model.summary())#模型小结,在训练时可以看到网络的结构参数model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])#定义训练模型时的loss函数,acc函数,以及优化器,这个adam优化器不用导入,属于自适应优化器,这样我在一开始导入的SGD就没用了。from keras.callbacks import TensorBoardimport timeimport kerasmodel_name = "模型名-{}".format(int(time.time()))tensorboard = TensorBoard(log_dir='logs'.format(model_name),write_images='Ture')tensorboard=keras.callbacks.TensorBoard(histogram_freq=1)history=model.fit(X_train, Y_train,epochs=150,validation_data=(X_test, Y_test),batch_size=1024,callbacks=[tensorboard])#训练批量大小和批次#定义训练的正反向传播,epochs训练批次,batch_size每个批次的大小集每次有多少个数据参与训练,数字不能太大,也不能太小,为数据集的20%为宜model_json =model.to_json()with open('C:/Users/1/Desktop/model3', 'w')as json_file: json_file.write(model_json)# 权重不在json中,只保存网络结构model.save_weights('C:/Users/1/Desktop/model3.json.h5')#画出损失函数图import matplotlib.pyplot as plt#这再次导入plt画图工具plt.figure(figsize = (8, 6))plt.rcParams['axes.unicode_minus'] = False#plt.rcParams['font.sans-serif'] = ['SimSun']#这一行已经画不出东西了,留着吧plt.rcParams['font.sans-serif'] = ['Times New Roman']#plt.plot(history.history['loss'],'g--',label="Train_loss", )#画出train_loss曲线#plt.plot(history.history['val_loss'],'k:',label='Test_loss', )#画出val_loss曲线#plt.plot(history.history['accuracy'],'b-.',label='Train_acc', )#画出train_acc曲线#plt.plot(history.history['val_accuracy'],'r-',label='Test_acc', )#画出val_acc曲线plt.plot(history.history['loss'],label="Train_loss", )#画出train_loss曲线plt.plot(history.history['val_loss'],label='Test_loss', )#画出val_loss曲线plt.plot(history.history['accuracy'],label='Train_acc', )#画出train_acc曲线plt.plot(history.history['val_accuracy'],label='Test_acc', )#画plt.xlim(1,150)#plt.legend(loc='upper left')plt.rcParams.update({'font.size':20})plt.legend()plt.xlabel('Epochs ', fontsize=20) # x轴名称plt.xticks(fontsize=20)#嗯调调字体plt.yticks(fontsize=20)plt.ylabel('Accuracy and Loss', fontsize=20) # y轴名称plt.show()#显示画出的曲线图los=history.history['val_loss']Aos=history.history['val_accuracy']

我这个数据增强代码还需要升级改进,目前分两类用起来比较方便,如果类别较多的话还需要早来一个for循环,但这也好过一个一个制作CSV文件
TICNN的模型参数:

不得不说人家提出的神经网络模型真的很牛逼,按照这个计算感受视野属实优秀许多。
训练结果如下:


离大谱
仔细观察,我的数据输入进来根本就没有进行归一化,但是训练起来几乎3步之内准确率已经达到1,Loss接近0,150次Loss可以达到10的-7次方级别。属实牛逼

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