最近写的一些程序以及做的一个关于轴承故障诊断的程序

最近学习进度有些慢

而且马上假期

要去补习班

去赚下学期生活费

额。。。。

抓紧时间再多学习点

1.RNN递归神经网络Tensorflow实现程序

 import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = ''
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#载入数据集
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True) # 输入图片是28*28
n_inputs = 28 #输入一行,一行有28个数据
max_time = 28 #一共28行
lstm_size = 100 #隐层单元
n_classes = 10 # 10个分类
batch_size = 50 #每批次50个样本
n_batch = mnist.train.num_examples // batch_size #计算一共有多少个批次 #这里的none表示第一个维度可以是任意的长度
x = tf.placeholder(tf.float32,[None,784])
#正确的标签
y = tf.placeholder(tf.float32,[None,10]) #初始化权值
weights = tf.Variable(tf.truncated_normal([lstm_size, n_classes], stddev=0.1))
#初始化偏置值
biases = tf.Variable(tf.constant(0.1, shape=[n_classes])) #定义RNN网络
def RNN(X,weights,biases):
# inputs=[batch_size, max_time, n_inputs]
inputs = tf.reshape(X,[-1,max_time,n_inputs])
#定义LSTM基本CELL
lstm_cell = tf.contrib.rnn.core_rnn_cell.BasicLSTMCell(lstm_size)
# final_state[0]是cell state
# final_state[1]是hidden_state
outputs,final_state = tf.nn.dynamic_rnn(lstm_cell,inputs,dtype=tf.float32)
results = tf.nn.softmax(tf.matmul(final_state[1],weights) + biases)
return results #计算RNN的返回结果
prediction= RNN(x, weights, biases)
#损失函数
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y))
#使用AdamOptimizer进行优化
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
#结果存放在一个布尔型列表中
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))#argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#把correct_prediction变为float32类型
#初始化
init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init)
for epoch in range(6):
for batch in range(n_batch):
batch_xs,batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys}) acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
print ("Iter " + str(epoch) + ", Testing Accuracy= " + str(acc))

2.关于Tensorboard的简单学习(以MNIST手写数据集程序为例)

 import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = ''
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
#载入数据集
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
#每个批次的大小(即每次训练的图片数量)
batch_size = 100
#计算一共有多少个批次
n_bitch = mnist.train.num_examples // batch_size
#参数概要
def variable_summaries(var):
with tf.name_scope('summaries'):
mean = tf.reduce_mean(var)
tf.summary.scalar('mean', mean) #平均值
with tf.name_scope('stddev'):
stddev = tf.sqrt(tf.reduce_mean(tf.square(var - mean)))
tf.summary.scalar('stddev', stddev) #标准差
tf.summary.scalar('max', tf.reduce_max(var))
tf.summary.scalar('min', tf.reduce_min(var))
tf.summary.histogram('histogram', var)#直方图
#定义一个命名空间
with tf.name_scope('input'):
#定义两个placeholder
x = tf.placeholder(tf.float32, [None, 784], name='x_input')
y = tf.placeholder(tf.float32, [None, 10], name='y_input')
with tf.name_scope('layer'):
#创建一个只有输入层(784个神经元)和输出层(10个神经元)的简单神经网络
with tf.name_scope('weights'):
Weights = tf.Variable(tf.zeros([784, 10]), name='w')
variable_summaries(Weights)
with tf.name_scope('biases'):
Biases = tf.Variable(tf.zeros([10]), name='b')
variable_summaries(Biases)
with tf.name_scope('Wx_plus_B'):
Wx_plus_B = tf.matmul(x, Weights) + Biases
with tf.name_scope('softmax'):
prediction = tf.nn.softmax(Wx_plus_B)
#二次代价函数
with tf.name_scope('loss'):
loss = tf.reduce_mean(tf.square(y - prediction))
tf.summary.scalar('loss', loss)
#使用梯度下降法
with tf.name_scope('train'):
train_step = tf.train.GradientDescentOptimizer(0.2).minimize(loss)
#初始化变量
init = tf.global_variables_initializer()
#结果存放在一个布尔型列表中
with tf.name_scope('accuracy'):
with tf.name_scope('correct_prediction'):
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1)) #argmax返回一维张量中最大的值所在的位置,标签值和预测值相同,返回为True
#求准确率
with tf.name_scope('correct_prediction'):
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) #cast函数将correct_prediction的布尔型转换为浮点型,然后计算平均值即为准确率 #合并所有的summary
merged = tf.summary.merge_all() #定义会话
with tf.Session() as sess:
sess.run(init)
writer = tf.summary.FileWriter('logs/', sess.graph)
#将测试集循环训练50次
for epoch in range(51):
#将测试集中所有数据循环一次
for batch in range(n_bitch):
batch_xs, batch_ys = mnist.train.next_batch(batch_size) #取测试集中batch_size数量的图片及对应的标签值
summary,_= sess.run([merged, train_step], feed_dict={x:batch_xs, y:batch_ys}) #将上一行代码取到的数据进行训练
writer.add_summary(summary, epoch)
acc = sess.run(accuracy, feed_dict={x:mnist.test.images, y:mnist.test.labels}) #准确率的计算
print('Iter : ' + str(epoch) + ',Testing Accuracy = ' + str(acc))

3. CNN应用——简单的轴承故障诊断模型

3.1数据来源及介绍

轴承、轴、齿轮是旋转机械重要组成部分,为了验证深度学习在旋转装备故障分类识别的有效性,

选取凯斯西储大学轴承数据库(Case Western Reserve University, CWRU)为验证数据。

轴承通过电火花加工设置成四种尺寸的故障直径,分别为0.007、0.014、0.021、0.028英寸。

实验中使用加速度传感器采集振动信号,传感器分别被放置在电机驱动端与风扇端。

由于驱动端采集到的振动信号数据全面,并且收到其他部件和环境噪声的干扰较少,选取驱动端采集的振动信号作为实验数据。

实验数据包括4种轴承状态下采集到的振动信号,分别为正常状态(Normal,N)、滚珠故障状态(Ball Fault,BF)、外圈故障状态(Outer Race Fault,ORF)以及内圈故障状态(Inner Race Fault,IRF),

每种状态下采集到的信号又按照故障直径与负载的大小进行分类,其中故障直径分别为0.007、0.014、0.021、0.028英寸,负载大小从0Hp-3Hp(1Hp=746W),对应转速为1797rpm、1772rpm、1750rpm、1730rpm。

选取CWRU数据集中采样频率为12k Hz的各个状态的样本,通过深度学习建立故障诊断模型,对电机轴承的四种故障进行分类识别。

由于负载的不同,转速不恒定,但采集的转速都在1800rpm左右,采样频率为12kHz,转轴转一圈,约采集400(60/1800*12000 = 400)个数据点。

由于采用原始数据切分方式,通常取稍微大于一个周期的点数比较合适,为了便于多层CNN网络的输入,以24*24=576点作为输入长度。

3.2 Matlab数据处理程序

 clear all;
clc;
load DataSet;
[iType, iCondition] = size(A);
iExtSize = *;
iSampleRate = ;
iTime = ;
iOverlap = floor(iExtSize * 0.9);
iUCover = iExtSize - iOverlap;
iGetDataLen = iSampleRate*iTime + iExtSize;
iLen2 = floor((iGetDataLen-iExtSize)/iUCover) + ;
iLen1 = floor(iLen2/)*;
iGetDataLen = iLen1*iUCover + iExtSize;
fExtSamp = zeros(iType, iGetDataLen); tmp = ;
for jCnt = : iType
str1 = sprintf('%03d',A(jCnt,));
szValName = strcat('X', str1, '_DE_time');
eval(strcat('tmp=',szValName,';'));
fExtSamp(jCnt,:) = tmp(:iGetDataLen);
end
iLen = iLen1;
iSampSize = iLen * iType;
fData = zeros(iSampSize, iExtSize);
fLabel = zeros(iSampSize, ); for iCnt = ::iLen
iInterval = (iCnt -)*iUCover + (::iExtSize);
for jCnt =::iType
fData((iCnt - )*iType + jCnt,:) = fExtSamp(jCnt, iInterval);
if (jCnt ==)
fLabel((iCnt - )*iType + jCnt,:) = [ ];
end
if (jCnt >= && jCnt<=)
fLabel((iCnt - )*iType + jCnt,:) = [ ];
end
if (jCnt >= && jCnt<=)
fLabel((iCnt - )*iType + jCnt,:) = [ ];
end
if (jCnt >=)
fLabel((iCnt - )*iType + jCnt,:) = [ ];
end
end
end
save('DL_Data90.mat','fData', 'fLabel');

3.3 CNN轴承故障诊断模型

 import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = ''
import numpy as np
import tensorflow as tf
from tensorflow.contrib import rnn
import matplotlib.pyplot as plt nSampleSize = 20000 # 总样本数
nSig_dim = 576 # 单个样本维度
nLab_dim = 4 # 类别维度 learning_rate = 1e-3
batch_size = tf.placeholder(tf.int32, []) # 在训练和测试,用不同的 batch_size
input_size = 24 # 每个时刻的输入维数为 24
timestep_size = 24 # 时序长度为24
hidden_size = 128 # 每个隐含层的节点数
layer_num = 3 # LSTM layer 的层数
class_num = nLab_dim # 类别维数 def getdata(nSampSize=20000):
# 读取float型二进制数据
signal = np.fromfile('DLdata90singal.raw', dtype=np.float64)
labels = np.fromfile('DLdata90labels.raw', dtype=np.float64)
#由于matlab 矩阵写入文件是按照【列】优先, 需要按行读取
mat_sig = np.reshape(signal,[-1, nSampSize])
mat_lab = np.reshape(labels,[-1, nSampSize])
mat_sig = mat_sig.T # 转换成正常样式 【样本序号,样本维度】
mat_lab = mat_lab.T
return mat_sig, mat_lab def zscore(xx):
# 样本归一化到【-1,1】,逐条对每个样本进行自归一化处理
max1 = np.max(xx,axis=1) #按行或者每个样本,并求出单个样本的最大值
max1 = np.reshape(max1,[-1,1]) # 行向量 ->> 列向量
min1 = np.min(xx,axis=1) #按行或者每个样本,并求出单个样本的最小值
min1 = np.reshape(min1,[-1,1]) # 行向量 ->> 列向量
xx = (xx-min1)/(max1-min1)*2-1
return xx def NextBatch(iLen, n_batchsize):
# iLen: 样本总数
# n_batchsize: 批处理大小
# 返回n_batchsize个随机样本(序号)
ar = np.arange(iLen) # 生成0到iLen-1,步长为1的序列
np.random.shuffle(ar) # 打乱顺序
return ar[0:n_batchsize] xs = tf.placeholder(tf.float32, [None, nSig_dim])
ys = tf.placeholder(tf.float32, [None, class_num])
keep_prob = tf.placeholder(tf.float32) x_input = tf.reshape(xs, [-1, 24, 24]) # 搭建LSTM 模型
def unit_LSTM():
# 定义一层 LSTM_cell,只需要说明 hidden_size
lstm_cell = rnn.BasicLSTMCell(num_units=hidden_size, forget_bias=1.0, state_is_tuple=True)
#添加 dropout layer, 一般只设置 output_keep_prob
lstm_cell = rnn.DropoutWrapper(cell=lstm_cell, input_keep_prob=1.0, output_keep_prob=keep_prob)
return lstm_cell #调用 MultiRNNCell 来实现多层 LSTM
mLSTM_cell = rnn.MultiRNNCell([unit_LSTM() for icnt in range(layer_num)], state_is_tuple=True) #用全零来初始化state
init_state = mLSTM_cell.zero_state(batch_size, dtype=tf.float32)
outputs, state = tf.nn.dynamic_rnn(mLSTM_cell, inputs=x_input,initial_state=init_state, time_major=False)
h_state = outputs[:, -1, :] # 或者 h_state = state[-1][1] #设置 loss function 和 优化器
W = tf.Variable(tf.truncated_normal([hidden_size, class_num], stddev=0.1), dtype=tf.float32)
bias = tf.Variable(tf.constant(0.1,shape=[class_num]), dtype=tf.float32)
y_pre = tf.nn.softmax(tf.matmul(h_state, W) + bias) #损失和评估函数
cross_entropy = tf.reduce_mean(tf.reduce_sum(-ys*tf.log(y_pre),reduction_indices=[1]))
train_op = tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(ys,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) mydata = getdata()
iTrainSetSize = np.floor(nSampleSize*3/4).astype(int) # 训练样本个数
iIndex = np.arange(nSampleSize) # 按照顺序,然后划分训练样本、测试样本
train_index = iIndex[0:iTrainSetSize]
test_index = iIndex[iTrainSetSize:nSampleSize] train_data = mydata[0][train_index] # 训练数据
train_y = mydata[1][train_index] # 训练标签
test_data = mydata[0][test_index] # 测试数据
test_y = mydata[1][test_index] # 测试标签 train_x = zscore(train_data) # 对训练数据进行归一化
test_x = zscore(test_data) # 对测试数据进行归一化 init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init)
for icnt in range(1000):
_batch_size = 100
intervals = NextBatch(iTrainSetSize, _batch_size) # 每次从所有样本中随机取100个样本(序号)
xx = train_x[intervals]
yy = train_y[intervals]
if (icnt+1)%100 == 0:
train_accuracy = sess.run(accuracy, feed_dict={
xs:xx, ys: yy, keep_prob: 1.0, batch_size: _batch_size})
print("step: " + "{0:4d}".format(icnt+1) + ", train acc:" + "{:.4f}".format(train_accuracy))
sess.run(train_op, feed_dict={ xs:xx, ys: yy, keep_prob: 0.9, batch_size: _batch_size})
bsize = test_x.shape[0]
test_acc = sess.run(accuracy,feed_dict={xs:test_x, ys:test_y, keep_prob: 1.0, batch_size:bsize})
print("test acc:" + "{:.4f}".format(test_acc))

#写在后面

新的一年了

感觉开始的一塌糊涂

不过这两天好像调整过来了

让自己成为一个有计划的人

坚持健身、坚持减肥、学习理财、学习穿搭、学BEC中级、学机器学习、学Java、学Python、学深度学习框架、准备实习、积极准备找工作!

坚持早点睡觉、坚持早点起床

坚持不拖延

坚持放下手机

坚持不去抱怨生活、不去抱怨别人

坚持!做一个自律、自信的小伙郭

忙碌起来

为最好的那个自己而不断努力

不要患得患失的去迷茫明天

而是在每一个今天,都活出最精彩的一天

羡慕那些活的精致的人

我也要好好加油才好!

机器学习与Tensorflow(6)——LSTM的Tensorflow实现、Tensorboard简单实现、CNN应用的更多相关文章

  1. 第二十一节,使用TensorFlow实现LSTM和GRU网络

    本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...

  2. 学习Tensorflow的LSTM的RNN例子

    学习Tensorflow的LSTM的RNN例子 基于TensorFlow一次简单的RNN实现 极客学院-递归神经网络 如何使用TensorFlow构建.训练和改进循环神经网络

  3. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

  4. 【TensorFlow】:解决TensorFlow的ImportError: DLL load failed: 动态链接库(DLL)初始化例程失败

    [背景] 在scikit-learn基础上系统结合数学和编程的角度学习了机器学习后(我的github:https://github.com/wwcom614/machine-learning),意犹未 ...

  5. tensorflow学习笔记----tensorflow在windows的安装及TensorBoard中mnist样例

    前言:                                                                                                 ...

  6. tensorflow笔记:流程,概念和简单代码注释

    tensorflow是google在2015年开源的深度学习框架,可以很方便的检验算法效果.这两天看了看官方的tutorial,极客学院的文档,以及综合tensorflow的源码,把自己的心得整理了一 ...

  7. tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)

    续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...

  8. tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)

    mnist的卷积神经网络例子和上一篇博文中的神经网络例子大部分是相同的.但是CNN层数要多一些,网络模型需要自己来构建. 程序比较复杂,我就分成几个部分来叙述. 首先,下载并加载数据: import ...

  9. tensorflow笔记(三)之 tensorboard的使用

    tensorflow笔记(三)之 tensorboard的使用 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7429344.h ...

随机推荐

  1. java学习笔记(十一):重写(Override)与重载(Overload)

    重写(Override) 重写是子类对父类的允许访问的方法的进行重新编写, 但是返回值和形参都不能改变. 实例 class Animal{ public void run(){ System.out. ...

  2. Linux基础知识回顾及BASH学习

    2019-2020-030189224 <网络攻防技术与实践>第一周学习总结 Linux基础知识错题回顾 1.Linux中使用(B)命令新建空白文件. A .mkdir B .touch ...

  3. Unity 2018 By Example 2nd Edition

    Unity is the most exciting and popular engine used for developing games. With its 2018 release, Unit ...

  4. 333. Largest BST Subtree节点数最多的bst子树

    [抄题]: Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where large ...

  5. 199. Binary Tree Right Side View 从右侧看的节点数

    [抄题]: Given a binary tree, imagine yourself standing on the right side of it, return the values of t ...

  6. 22. Generate Parentheses产生所有匹配括号的方案

    [抄题]: Given n pairs of parentheses, write a function to generate all combinations of well-formed par ...

  7. python问题:AttributeError: 'module' object has no attribute 'SSL_ST_INIT'(转)

    原文地址:http://www.cnblogs.com/zhaijiahui/p/7344778.html AttributeError: 'module' object has no attribu ...

  8. Python3,x:Fiddler抓包工具如何进行手机APP的数据爬取

    示例一:苹果手机抓取教程 https://www.cnblogs.com/lizm166/p/8693085.html https://blog.csdn.net/cui130/article/det ...

  9. Mybatis 中实体类的编写

    一个实体类对应一个数据表 一个属性对应一个字段 默认情况下类名和属性名都采用 “下划线转驼峰” 的命名方式.但具体采用什么样的命名方式并不重要(方式一致即可),在后面使用这些对象的时候,可以通过 re ...

  10. 【转】linux 查看进程启动路径

    在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep pyt ...