赞
踩
读研之掉进故障检测(二)
(一)是对CWRU轴承数据集分析论文的一些总结
读研之掉进故障检测—CWRU轴承数据集的三种已建立的诊断技术
基于卷积神经网络的轴承故障诊断算法研究—张伟
DIO: CNKI:CDMD:2.1017.864225
对该论文中第2章 基于一维卷积神经网络的滚动轴承故障诊断方法的一种实现代码
原论文的作者给出了第三章的实现代码,这里给出github
https://github.com/yfshich/wdcnn_bearning_fault_diagnosis-master
轴承故障诊断其算法的核心在于信号特征提取与模式分类两个部分。
------在轴承故障诊断领域,常见的特征提取算法有快速傅里叶变化,小波变换,经验模式分解以及信号的统计学特征等,常见的模式分类算法有支持向量机,BP 神经网络(也称为多层感知器),贝叶斯分类器以及最近邻分类器等。当下轴承故障诊断的研究热点是可以归结为 3 类:寻找更好的特征表达;寻找最适合的特征表达以及分类器的组合;以及发明新的传感器。
------一种端到端的诊断算法,省去了人为特征提取过程,即基于卷积神经网络的轴承故障诊断算法
1、网络层,卷积1,卷积核大小/步长:20 × 1/8× 1,卷积核数目32,输出大小(宽度深度 )25632,零补:是
2、网络层,池化 1,卷积核大小/步长:4 × 1/4 × 1,卷积核数目32,输出大小(宽度深度 )64 × 32,零补:否
3、网络层,卷积 2,卷积核大小/步长:5 × 1/2 × 1,卷积核数目64,输出大小(宽度深度 )32 × 64,零补:是
4、网络层,池化 2,卷积核大小/步长:2 × 1/2 × 1,卷积核数目64,输出大小(宽度深度 )16 × 64,零补:否
5、网络层,全连接,卷积核大小/步长:500,卷积核数目1,输出大小(宽度深度 )256*32,
6、网络层,softmax
代码
from keras.layers import Conv1D, Dense, Dropout, BatchNormalization, MaxPooling1D, Activation, Flatten from keras.models import Sequential import preprocess from keras.callbacks import TensorBoard import numpy as np import matplotlib.pyplot as plt from matplotlib import rcParams config = { "font.family": 'serif', "font.size": 10, "font.serif": ['SimSun'], "mathtext.fontset": 'stix', 'axes.unicode_minus': False } rcParams.update(config) # 训练参数 batch_size = 128 epochs = 20 num_classes = 10 length = 2048 BatchNorm = True number = 1000 normal = True rate = [0.7, 0.2, 0.1] val_acc = [] val_loss = [] path = r'data\0HP' #在preprocess.prepro中已经有数据增强enc=True x_train, y_train, x_valid, y_valid, x_test, y_test = preprocess.prepro(d_path=path, length=length, number=number, normal=normal, rate=rate, enc=True, enc_step=28) x_train, x_valid, x_test = x_train[:, :, np.newaxis], x_valid[:, :, np.newaxis], x_test[:, :, np.newaxis] input_shape = x_train.shape[1:] print('训练样本维度:', x_train.shape) print(x_train.shape[0], '训练样本个数') print('验证样本的维度', x_valid.shape) print(x_valid.shape[0], '验证样本个数') print('测试样本的维度', x_test.shape) print(x_test.shape[0], '测试样本个数') # Instantiate a sequential model model = Sequential() # Layer 1: Convolutional layer model.add(Conv1D(filters=32, kernel_size=20, strides=8, input_shape=input_shape, padding='same')) model.add(Activation('relu')) # Layer 2: Pooling layer model.add(MaxPooling1D(pool_size=4, strides=4)) # Layer 3: Convolutional layer model.add(Conv1D(filters=64, kernel_size=5, strides=2, padding='same')) model.add(Activation('relu')) # Layer 4: Pooling layer model.add(MaxPooling1D(pool_size=2, strides=2)) # Layer 5: Fully connected layer model.add(Flatten()) model.add(Dense(units=500, activation='relu')) # Output layer model.add(Dense(units=10, activation='softmax')) # Print model summary model.summary() # 编译模型 model.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy']) # TensorBoard调用查看一下训练情况 tb_cb = TensorBoard(log_dir='logs') # 开始模型训练,获取历史数据 history = model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_valid, y_valid), shuffle=True, callbacks=[tb_cb]) val_acc.extend(history.history['val_accuracy']) val_loss.extend(history.history['val_loss']) # 评估模型 score = model.evaluate(x=x_test, y=y_test, verbose=0) print("测试集上的损失:", score[0]) print("测试集上的准确率:", score[1]) plt.figure(figsize=(12, 6)) epochs_range = range(1, epochs + 1) plt.subplot(1, 2, 1) plt.plot(epochs_range, val_acc, label='Validation Accuracy') plt.title('Validation Accuracy') plt.xlabel('Epochs') plt.ylabel('Accuracy') plt.legend() plt.subplot(1, 2, 2) plt.plot(epochs_range, val_loss, label='Validation Loss') plt.title('Validation Loss') plt.xlabel('Epochs') plt.ylabel('Loss') plt.legend() plt.tight_layout() plt.show()
具体结果是与论文中呈现的效果不同的,写这篇文章的主要目的就是为了学习如何使用CWRU轴承的数据集,属于抛砖引玉吧。
数据增强的函数为代码中的:def overlap_sampling(x_train, y_train, length, offset)
无数据增强的结果为
有数据增强的效果为
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。