使用一维Rest-net卷积神经网络对轴承进行故障诊断

据了解rest-net从图像分类大赛上表现优异,那么将rest-net进行降维用于一维数据分类会有怎样表现?
先观察一下Rest-net的结构:由于每个截图有限,所以使用多个图片表现出😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂
在这里插入在这里插入图片描述
图片描述
第一个
在这里插入图片描述
第二个
在这里插入图片描述
第三个
在这里插入图片描述
第四个
在这里插入图片描述
第5个
在这里插入图片描述
第6个
在这里插入图片描述
第7个
在这里插入图片描述
第8个
在这里插入图片描述
第9个
在这里插入图片描述
第10个
在这里插入图片描述
结构就如上所示:
代码如下:

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 26 21:16:03 2020

@author: 1
"""

import numpy as np
import pandas as pd
import keras
import tensorflow as tf
from keras.models import Sequential
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils,plot_model
from sklearn.model_selection import cross_val_score,train_test_split,KFold
from sklearn.preprocessing import LabelEncoder
from keras.layers import Input,add,Dense,AveragePooling1D, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalization,GlobalAveragePooling1D,ZeroPadding1D
from keras.models import load_model
from keras.models import model_from_json
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import itertools
from keras import layers
from keras.optimizers import SGD

#读入数据
df = pd.read_csv(r'C:/Users/1/Desktop/实验数据/凯斯西储.csv')
X = np.expand_dims(df.values[:, 0:1024].astype(float), axis=2)
Y = df.values[:, 1024]
 
#把Y编辑成独热码
encoder = LabelEncoder()
Y_encoded = encoder.fit_transform(Y)
Y_onehot = np_utils.to_categorical(Y_encoded)
 
#划分数据集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y_onehot, test_size=0.3, random_state=0)
 

seed = 7
np.random.seed(seed)
 
def Conv2d_BN(x, nb_filter,kernel_size, strides=1, padding='same',name=None):
    if name is not None:
        bn_name = name + '_bn'
        conv_name = name + '_conv'
    else:
        bn_name = None
        conv_name = None
 
    x = Convolution1D(nb_filter,kernel_size,padding=padding,strides=strides,activation='relu',name=conv_name)(x)
    x = BatchNormalization(axis=1,name=bn_name)(x)
    return x
 
def Conv_Block(inpt,nb_filter,kernel_size,strides=1, with_conv_shortcut=False):
    x = Conv2d_BN(inpt,nb_filter=nb_filter,kernel_size=1,strides=strides,padding='same')
    x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=3, padding='same')
    x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=1, padding='same')
    if with_conv_shortcut:
        shortcut = Conv2d_BN(inpt,nb_filter=nb_filter,strides=strides,kernel_size=kernel_size)
        x = add([x,shortcut])
        return x
    else:
        x = add([x,inpt])
        return x
 
inpt = Input(shape=(1024,1))
x = ZeroPadding1D(3)(inpt)
x = Conv2d_BN(x,nb_filter=64,kernel_size=7,strides=2,padding='valid')
x = MaxPooling1D(pool_size=3,strides=2,padding='same')(x)
 
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3)
x = Conv_Block(x,nb_filter=64,kernel_size=3)
 
x = Conv_Block(x,nb_filter=128,kernel_size=3,strides=2,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=128,kernel_size=3)
x = Conv_Block(x,nb_filter=128,kernel_size=3)
x = Conv_Block(x,nb_filter=128,kernel_size=3)
 
x = Conv_Block(x,nb_filter=256,kernel_size=3,strides=2,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=256,kernel_size=3)
x = Conv_Block(x,nb_filter=256,kernel_size=3)
x = Conv_Block(x,nb_filter=256,kernel_size=3)
x = Conv_Block(x,nb_filter=256,kernel_size=3)
x = Conv_Block(x,nb_filter=256,kernel_size=3)
 
x = Conv_Block(x,nb_filter=512,kernel_size=3,strides=2,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=512,kernel_size=3)
x = Conv_Block(x,nb_filter=512,kernel_size=3)
x = AveragePooling1D(pool_size=7)(x)
x = Flatten()(x)
x=Dense(100,activation='relu')(x)
x = Dense(6,activation='softmax')(x)


from keras.models import Model 
model = Model(inputs=inpt,outputs=x)
model.summary()

model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])

#训练批量大小和批次
history=model.fit(X_train, Y_train,epochs=100,validation_data=(X_test, Y_test),batch_size=64)

model.save('C:/Users/1/Desktop/凯斯西储.h5')
#画出损失函数图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.plot(history.history['loss'],'_',label='train_loss')
plt.plot(history.history['val_loss'],':',label='val_loss')
plt.plot(history.history['accuracy'],'.',label='train_acc')
plt.plot(history.history['val_accuracy'],'r',label='val_acc')
plt.show()

数据集的形式和之前发的那几篇帖子一样,感兴趣的话自行下载,不过类别为6,本人从凯斯西储官网找到数据,进行制作,偷个懒弄6类😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁

训练结果如下:

在这里插入图片描述
正确率

在这里插入图片描述
损失函数,可以看出来,训练批次少肯定是不行的没有1DCNN那样优秀,但训练达到100次时候还是比较平稳的,还可以通过对噪声信号进行分类研究它和1DCNN那个更好,还可以将AdaBN理论应用进去提高它的性能(参考知网某文献,找不到了所以不写名字了)。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让我顺利毕业吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值