先放参考链接,感谢大神们带来的启发:
凯斯西储大学轴承数据故障分类(使用卷积神经网络)
TensorFlow实现MNIST识别(softmax)
前情回顾:
tensorflow 自编码器+softmax对mnist数据集进行分类
之前利用tensorflow建立自编码器,再加了分类层,实现了对MNIST数据集的分类,但是这是对于图片的处理,我更想要的是对一些时序数据进行分析,因此,尝试用凯斯西储大学的轴承数据进行故障分类。这个轴承数据网上可以直接下载,也有很多介绍,这里就不介绍了。只是提一下我的数据的前期处理。
根据上面的第一个参考链接,原博主是用txt版本的轴承数据直接读入的,但是网上基本找不到这种数据,官网下载下来的也都是mat版本,因此,我也修改了原博主的代码,改为读取mat文件。但是还是存在问题,就是每个mat文件里有3-4个列表,每个列表名字不同且各自包括了120000以上的数据,而我们只需要120000个数据,也就是说只要一个列表的就足够了,其次,当我们利用sicomat函数读取mat文件后,由于有多个列表,导致没办法直接把120000个数据提出来,需要先读取每个列表的名字,再分名字读取数据,而我们一共有10个mat文件,这个工作量就很大了。由于我是个小新手,实在还不太会这个操作,因此我选择了更简单粗暴的方法,就是先用matlab软件打开这些mat文件,删掉文件里多余的列表,只保留一个,同时,还是为了读取数据的时候方便(不然每个文件的列表名字不一样,那就还得读取列表名字后才能操作),将列表名字统一改为"X"。依次对10个文件进行逐个操作后,放入到对应的类别中去。

# -*- coding: utf-8 -*-
"""
Created on Tue Aug 18 16:53:14 2020@author: Administrator
"""import numpy as np
import scipy.io as scio
import tensorflow as tf
import os"""
预处理有以下几个步骤:
1.以400个采样点为一个样本,取300个样本(取120000个采样点)
2.取200个作为训练集,100个作为测试集。
3.将六种类别数据堆叠成numpy数组
3.把训练集和测试集样本变形为(1620,20,20,1),这样就可以喂入卷积神经网络里进行训练了。
4.打乱数据
5.将标签转化为one-hot
"""
#重置图,否则后面跑第二遍进行预测时,会提示找不到变量(因为我们第二遍运行的时候重复定义了)
tf.reset_default_graph()def yuchuli(data,label):a = scio.loadmat(data)a=a['X']a = a[0:120000]a  = a.reshape(300,400)np.random.shuffle(a) #打乱函数顺序train = a[:200,:]test = a[200:,:]label_test = np.array([label for i in range(0,100)])#将标签填入后,label_test形状为(100,),维度并没有固定,这样我们后面无法天赋到y_true中,因此想要用reshape把它的形状固定下来label_test=label_test.reshape([100,1])label_train = np.array([label for i in range(0, 200)])label_train=label_train.reshape([200,1])return train,test ,label_train ,label_test#叠加
def stackkk(a,b,c,d,e,f,g,h):aa = np.vstack((a, e)) #np.vstack():在竖直方向上堆叠bb = np.vstack((b, f)) cc = np.vstack((c, g)) #源代码中这里是水平堆叠的,但是由于我们上面规定了label的形状为1列,为了统一,这里也改成垂直堆叠dd = np.vstack((d, h))return aa,bb,cc,dd#在读入数据之前,需要对数据进行处理:1.每个mat文件中包含了3-4个列表,只保留想要的哪一个,其他的删掉 2.将保留下来的那一个的名字统一改为X,
#这样是方便预处理,否则就需要读取每个列表的名字,再进行数据读取,会麻烦一点
x_tra0,x_tes0,y_tra0,y_tes0 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Normal\Normal_0.mat',0)
x_tra1,x_tes1,y_tra1,y_tes1 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Inner\IR007_0.mat',1)
x_tra2,x_tes2,y_tra2,y_tes2 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Inner\IR014_0.mat',1)
x_tra3,x_tes3,y_tra3,y_tes3 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Inner\IR021_0.mat',1)
x_tra4,x_tes4,y_tra4,y_tes4 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Outer\OR007@6_0.mat',2)
x_tra5,x_tes5,y_tra5,y_tes5 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Outer\OR014@6_0.mat',2)
x_tra6,x_tes6,y_tra6,y_tes6 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Outer\OR021@6_0.mat',2)
x_tra7,x_tes7,y_tra7,y_tes7 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Roller\B007_0.mat',3)
x_tra8,x_tes8,y_tra8,y_tes8 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Roller\B014_0.mat',3)
x_tra9,x_tes9,y_tra9,y_tes9 = yuchuli(r'C:\Users\Administrator\Desktop\SDAE\6205-12K\Roller\B021_0.mat',3)#对数据和标签进行分别的组合
tr1,te1,yr1,ye1=stackkk(x_tra0,x_tes0,y_tra0,y_tes0 ,x_tra1,x_tes1,y_tra1,y_tes1)
tr2,te2,yr2,ye2=stackkk(tr1,te1,yr1,ye1,x_tra2,x_tes2,y_tra2,y_tes2)
tr3,te3,yr3,ye3=stackkk(tr2,te2,yr2,ye2,x_tra3,x_tes3,y_tra3,y_tes3)
tr4,te4,yr4,ye4=stackkk(tr3,te3,yr3,ye3,x_tra4,x_tes4,y_tra4,y_tes4)
tr5,te5,yr5,ye5=stackkk(tr4,te4,yr4,ye4,x_tra5,x_tes5,y_tra5,y_tes5)
tr6,te6,yr6,ye6=stackkk(tr5,te5,yr5,ye5,x_tra6,x_tes6,y_tra6,y_tes6)
tr7,te7,yr7,ye7=stackkk(tr6,te6,yr6,ye6,x_tra7,x_tes7,y_tra7,y_tes7)
tr8,te8,yr8,ye8=stackkk(tr7,te7,yr7,ye7,x_tra8,x_tes8,y_tra8,y_tes8)
tr9,te9,yr9,ye9=stackkk(tr8,te8,yr8,ye8,x_tra9,x_tes9,y_tra9,y_tes9)
#print('测试标签:',ye9,'\n','训练标签:',yr9)y_train = yr9
y_test = ye9
x_train=tr9
x_test=te9
#源代码中这里将tr9和te9都转换为了[2000,20,20,1]的矩阵,是为了方便传入CNN中
#但是我们的SDAE中只需要二维的矩阵,而这一点我们在预处理中就做好了,因此并不需要进行形状的改变
#转化为二维矩阵
#x_train = tr9.reshape(2000,20,20,1)
#每一个类别数据取120000个数据,组成[300,400]的矩阵,即300个样本,其中前200行为训练样本,共十个类别,就是400*200*10=800000
#x_test = te9.reshape(1000,20,20,1)state = np.random.get_state()
#获取随机生成器 np.random的状态 ,常与np.random.set_state() 搭配使用。使随机生成器random保持相同的状态(state)
np.random.shuffle(x_train) #打乱顺序
np.random.set_state(state)
np.random.shuffle(y_train)def to_one_hot(labels,dimension=4):#4是指四个种类results = np.zeros((len(labels),dimension)) # len() 方法返回对象(字符、列表、元组等)长度或项目个数for i,label in enumerate(labels): #将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中results[i,label] = 1 #我们传入的y_train是一个200*1的矩阵,值在0~3之间,将这个值看做m,这个代码表示将results的第i行的第m+1(因为索引从0开始计数)个值变为1#比方说,y_true的第一行为1,则m=1,results的第一行就应该是第2个值为1,即第一行为[0,1,0,0]return results
one_hot_train_labels = to_one_hot(y_train)#将标签变为了[2000,4]的矩阵
one_hot_test_labels = to_one_hot(y_test)
#print(one_hot_train_labels)#建立模型
x=tf.placeholder(tf.float32,[None,400])#占位符
y_true = tf.placeholder(tf.int32, [None,4])def add_layer(input_data,input_num,output_num,activation_function=None):w=tf.Variable(initial_value=tf.random_normal(shape=[input_num,output_num]))b=tf.Variable(initial_value=tf.random_normal(shape=[1,output_num]))output=tf.add(tf.matmul(input_data,w),b)if activation_function:output=activation_function(output)return outputdef build_nn(data):#编码hidden_layer1=add_layer(data,400,200,activation_function=tf.nn.sigmoid)hidden_layer2=add_layer(hidden_layer1,200,100,activation_function=tf.nn.sigmoid)#解码hidden_layer3=add_layer(hidden_layer2,100,200,activation_function=tf.nn.sigmoid)output_layer=add_layer(hidden_layer3,200,400,activation_function=tf.nn.sigmoid)softmax_layer=add_layer(hidden_layer2,100,4,activation_function=tf.nn.softmax)return output_layer,softmax_layerdef train_nn(data):output,y_predict=build_nn(data)#softmax分类层的交叉熵函数cross=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_true,logits=y_predict))#SDAE模型的损失函数loss=tf.reduce_mean(tf.square(output-data)) #这里其实用不到loss,这是我后面想要做堆叠自编码器要用的optimizer=tf.train.AdamOptimizer(learning_rate=0.01).minimize(cross)#对比预测值和真实值correct_prediction = tf.equal(tf.argmax(y_predict, 1), tf.argmax(y_true, 1))#计算预测准确率,它们都是Tensoraccuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))saver=tf.train.Saver()with tf.Session() as sess:sess.run(tf.global_variables_initializer())if not os.path.exists("./SDAE_model_save/checkpoint"):for i in range(20):epoch_softmax_cost=0#x_data,y_data=mnist.train.next_batch(batch_size)softmax_cost,_=sess.run([cross,optimizer],feed_dict={x:x_train,y_true:one_hot_train_labels})epoch_softmax_cost+=softmax_cost# 正确的预测结果acc_train=sess.run(accuracy,feed_dict={x:x_train,y_true:one_hot_train_labels})# 在Session中运行Tensor可以得到Tensor的值# 这里是获取最终模型的正确率#print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_true: mnist.test.labels}))print("Epoch",i,":",epoch_softmax_cost,acc_train)saver.save(sess,"./SDAE_model_save/model")else:saver.restore(sess,"./SDAE_model_save/model")predict=sess.run(y_predict,feed_dict={x:x_test,y_true:one_hot_test_labels})acc_test=sess.run(accuracy,feed_dict={x:x_test,y_true:one_hot_test_labels})#predict=np.argmax(predict,1)print(predict,acc_test)#print("测试集准确率:",)if __name__=="__main__":train_nn(x)

还是老规矩,第一遍运行利用训练集训练参数并保存,第二遍运行,读取保存好的参数模型,预测分类

tensorflow自编码器+softmax对凯斯西储大学轴承数据进行故障分类相关推荐

  1. tensorflow 堆叠自编码器SDAE对凯斯西储大学轴承数据进行故障分类

    之前的一些介绍:tensorflow自编码器+softmax对凯斯西储大学轴承数据进行故障分类 前面研究了一下自编码器,并顺利利用自编码器对轴承数据进行了故障分类,但我们在实际应用时,应用更多的还是堆 ...

  2. CWRU(凯斯西储大学轴承数据中心)数据集获取

    CWRU(凯斯西储大学轴承数据中心)数据集获取网址 https://engineering.case.edu/bearingdatacenter/apparatus-and-procedures 数据 ...

  3. 凯斯西储大学轴承数据具体处理过程(用作CNN输入)

    凯斯西储大学轴承数据具体处理过程 本文阐述处理类似凯斯西储大学的轴承数据(一维时间序列信号)的一种方法(结合CNN使用). 原信号在数据文件中是以mat文件呈现,如果想具体查看文件里面放的什么数据,可 ...

  4. 凯斯西储大学轴承数据的疑问

    这里有两个问题: ①在使用凯斯西储大学轴承数据进行CNN故障分类时, 训练的准确率从开始的慢慢增长,一直到训练几百次之后,准确率会骤降,突然降低到0.1左右,然后一直保持很低的状态,大概是训练模型不起 ...

  5. 凯斯西储大学轴承数据介绍及处理

    轴承故障诊断一般使用美国凯斯西储大学的数据集进行标准化检测算法的优劣.以下几种实验数据提取和使用方法为我在论文中所看到的.进行以下陈述 一.基于 RA-LSTM 的轴承故障诊断方法 实验数据采用美国凯 ...

  6. 凯斯西储大学轴承数据故障分类(使用卷积神经网络)

    一.数据预处理 我们挑选了同一工况下的五种故障进行分类实验.故障类别如下: 因为该数据是一维的,所以我们要进行一些预处理.有以下步骤: 1.以400个采样点为一个样本,取300个样本(取120000个 ...

  7. Tensorflow2.0:CNN 解决凯斯西储大学轴承数据集的分类问题

    文章目录 项目介绍 代码实现 1.导入需要的库 2.参数设置 3.归一化 4.定义滑窗函数 5.取样本 6.划分训练集和测试集 7.得到 Dataset 类型数据集 8.建立模型 9.初始化优化器 1 ...

  8. 凯斯西储大学轴承故障诊断数据集详解

    目录 前言 一.凯斯西储大学数据集的来源与历史 二.凯斯西储大学数据集的结构与特点 三.凯斯西储大学数据集的实验环境 四.凯斯西储大学数据集在轴承故障诊断研究中的应用 五.凯斯西储大学数据集的局限性 ...

  9. 美国西储大学轴承数据

    如图所示,实验平台包括一个2马力的电机(左侧)(1hp=746W),一个转矩传感器(中间),一个功率计(右侧)和电子控制设备(没有显示).被测试轴承支承电机轴.使用电火花加工技术在轴承上布置了单点故障 ...

最新文章

  1. 浅析SAAS数据模型设计(Oracle)
  2. 《数据科学家养成手册》第十章--混沌论
  3. 抽象:程序员必备的能力
  4. 关于 SAP Spartacus 服务器端渲染 SSR 无法使用窗口宽度以进行自适应设计的问题
  5. 微软作为金牌会员加入Cloud Foundry基金会
  6. C#_解决在控制台中输入Ctrl+Z的问题
  7. 隔空互撕!李想炮轰团车造车是“骗子”,团车CEO回怼:别把自己当先知
  8. Progressive Scramble 复杂模拟
  9. C++子类的构造函数
  10. win7右下角无线网图标显示未连接,但是实际上已连接上,也能上网
  11. 34.Linux/Unix 系统编程手册(下) -- 进程组,会话和作业控制
  12. 配置CACTI监控MySQL数据库状态(2)安装cacti相关软件包
  13. 我的五年百度博客文章列表(带链接版)
  14. 哈工大在CoNLL上斩获全球第四,车万翔博士详解背后的技术细节
  15. error PRJ0003 : 生成“C:\WINDOWS\system32\cmd.exe”时出错
  16. flutter压缩图片上传
  17. 计算机科学与技术考研吧,计算机科学与技术考研学校排名
  18. mongodb 副本集搭建
  19. IDEA : 2022.1 版本更新内容一览
  20. 从都市丽人2022年财报,看专业内衣如何进阶突围

热门文章

  1. 网上最权威的人工智能分析
  2. 卡尔斯鲁厄理工学院计算机系申请,卡尔斯鲁厄理工学院申请
  3. 七款优秀的Linux任务管理工具
  4. HTML5 canvas五子棋游戏
  5. excel数据处理_excel数据处理:说说数据源表必须遵守的那些规则
  6. 免费生成ios证书,利用Hbuilder打包ipa
  7. Logistic回归实战---疝气病症预测病马的死亡率
  8. vba遍历数组_VBA 在行中循环遍历的例子
  9. 使用java解析和读取excel表格(EasyExcel的简单使用)
  10. 工作中常用的这个软件可直接下载谷歌影像