本文展示了如何构造一个卷积神经网络 (CNN) 并对自己的数据集进行分类。

1.数据集介绍、读入、转化

本文所用的数据集为西储大学轴承数据集,经过数据预处理将一维时序数据转化为灰度图,对灰度图进行分类。具体数据处理过程可参考: 一维时序信号转化成灰度图,基于DCGAN的时序信号数据集扩充_deeplearning小学生的博客-CSDN博客

经数据预处理后的数据集如下:train_pics,test_pics,train_labels,test_labels,文件格式为npz格式,train_pics和test_pics分别为训练集和测试集,内容为10类故障类型的灰度图;labels文件内容为与pics文件一一对应的标签。

数据读入及转化代码如下:

train_pics_dict = np.load("train_pics.npz")
train_labels_dict = np.load("train_labels.npz")
test_pics_dict = np.load("test_pics.npz")
test_labels_dict = np.load("test_labels.npz")train_images = []
train_labels = []
test_images = []
test_labels = []for i in train_pics_dict.files:tmp=np.array(train_pics_dict[i])tmp=tmp.reshape((64,64,1))train_images.append(tmp)train_labels.append(int(train_labels_dict[i]))for i in test_pics_dict.files:tmp=np.array(test_pics_dict[i])tmp=tmp.reshape((64,64,1))test_images.append(tmp)test_labels.append(int(test_labels_dict[i]))train_images=np.array(train_images)
test_images=np.array(test_images)
train_labels=np.array(train_labels)
train_labels=train_labels.reshape((-1,1))
test_labels=np.array(test_labels)
test_labels=test_labels.reshape((-1,1))# Normalize pixel values to be between 0 and 1
#train_images, test_images = train_images / 255.0, test_images / 255.0

2.构造网络模型,编译并训练模型


model = models.Sequential()
model.add(layers.Conv2D(32, (5, 5),padding='same', activation='relu', input_shape=(64, 64,1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(2560, activation='relu'))
model.add(layers.Dense(10))model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10,validation_data=(test_images, test_labels))

3.结果分析

最终预测准确率可以接近百分之百。

完整代码如下:

import tensorflow as tf
import LoadPic
import numpy as np
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
#import  cv2
from PIL import Imagetrain_pics_dict = np.load("train_pics.npz")
train_labels_dict = np.load("train_labels.npz")
test_pics_dict = np.load("test_pics.npz")
test_labels_dict = np.load("test_labels.npz")train_images = []
train_labels = []
test_images = []
test_labels = []for i in train_pics_dict.files:tmp=np.array(train_pics_dict[i])tmp=tmp.reshape((64,64,1))train_images.append(tmp)train_labels.append(int(train_labels_dict[i]))for i in test_pics_dict.files:tmp=np.array(test_pics_dict[i])tmp=tmp.reshape((64,64,1))test_images.append(tmp)test_labels.append(int(test_labels_dict[i]))train_images=np.array(train_images)
test_images=np.array(test_images)
train_labels=np.array(train_labels)
train_labels=train_labels.reshape((-1,1))
test_labels=np.array(test_labels)
test_labels=test_labels.reshape((-1,1))#(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()# Normalize pixel values to be between 0 and 1
#train_images, test_images = train_images / 255.0, test_images / 255.0class_names = [ "normal","ball_18","ball_36","ball_54","inner_18","inner_36","inner_54","outer_18","outer_36","outer_54"]
plt.figure(figsize=(10,10))
for i in range(25):plt.subplot(5,5,i+1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i],cmap='gray')# The CIFAR labels happen to be arrays,# which is why you need the extra index#plt.xlabel(class_names[train_labels[i][0]])
plt.show()model = models.Sequential()
model.add(layers.Conv2D(32, (5, 5),padding='same', activation='relu', input_shape=(64, 64,1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(256, (3, 3),padding='same', activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(2560, activation='relu'))
model.add(layers.Dense(10))model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])history = model.fit(train_images, train_labels, epochs=10,validation_data=(test_images, test_labels))plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0.5, 1])
plt.legend(loc='lower right')
plt.savefig("result.png")
plt.show()test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)print(test_acc)

基于二维灰度图的卷积神经网络故障诊断(tensorflow)相关推荐

  1. 2021-03-22-TensorFlow故障诊断代码-一维信号转二维灰度图

    故障诊断代码-一维信号转二维灰度图 凯斯西储大学数据划分及灰度图转换 故障诊断代码 凯斯西储大学数据划分及灰度图转换 https://mp.weixin.qq.com/s?__biz=MzkxMzE5 ...

  2. 图像分割——基于二维灰度直方图的阈值处理

    前言 像素灰度值仅仅反映了像素灰度级的幅值大小,并没有反映出像素与邻域的空间相关信息. 二维灰度直方图的概念 二维灰度直方图:像素的灰度值分布和邻域的平均灰度值分布构成的二维直方图 二维直方图的值N( ...

  3. Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

    Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  4. 基于空间金字塔池化的卷积神经网络物体检测

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  5. CNN应用之SPP(基于空间金字塔池化的卷积神经网络物体检测)-ECCV 2014-未完待续

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  6. 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测-ECCV 2014

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  7. 深度学习(十九)基于空间金字塔池化的卷积神经网络物体检测

    基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...

  8. AAAI 2020 | 时间可以是二维的吗?基于二维时间图的视频内容片段检测

    作者 | 彭厚文.傅建龙 来源 | 微软研究院AI头条 编者按:当时间从一维走向二维,时序信息处理问题中一种全新的建模思路由此产生.根据这种新思路及其产生的二维时间图概念,微软亚洲研究院提出一种新的解 ...

  9. 时间可以是二维的?基于二维时间图的视频内容片段检测 | AAAI 2020

    作者 | 彭厚文.傅建龙 来源 | 微软研究院AI头条(ID: MSRAsia) 编者按:当时间从一维走向二维,时序信息处理问题中一种全新的建模思路由此产生.根据这种新思路及其产生的二维时间图概念,微 ...

最新文章

  1. leetcode-12-整数转罗马数字
  2. 当我真正开始爱自己——查理·卓别林
  3. keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)...
  4. Spring4.2+quartz2.2集群
  5. Linux 命令(55)—— netstat 命令
  6. Custom Basic Authentication for IIS
  7. ubuntu openStack icehouse dashboard theme自定义
  8. 16年6月查询四六级的成绩页面问题
  9. 变量undefined详解
  10. matplotlib plot函数使用详解
  11. 关于python数据的纬度_Python插值时间,纬度和经度
  12. 1041. 考试座位号
  13. 计算机新建里没有word,电脑新建中没有word和excel怎么回事
  14. 实现手机来电铃声,通知铃声、警告铃声等音频定制化功能(一,添加扫描分区myimage)
  15. 程序员盗不了 QQ 学计算机有什么用?程序员欲哭无泪:我好难啊!
  16. 《基本穿搭:适用一生的穿衣法则》总结
  17. jvm系列之一:jvm结构
  18. 【可视化】娱乐一下,rviz上画个3D框
  19. webstorm运行ts/typescript文件时 出现中文乱码
  20. SUMIF和sumifs的区别

热门文章

  1. 用全站 CDN 部署 Discourse 论坛
  2. 1127. ZigZagging on a Tree (30)
  3. 石英晶体(Crystal)振荡电路
  4. 【历史上的今天】4 月 23 日:YouTube 上传第一个视频;数字音频播放器的发明者出生
  5. 历史事件词条1000条
  6. 面试经验 | 一个 Android 小老弟的面试记录 (1-3年)
  7. iOS 入门开发踩坑实录
  8. matlab 模拟关键词推广,关键词推广系统
  9. 串口软件Vofa+,超好用。可用于高速采集数据直观化显示动态
  10. 小白IT:从0~明白带你体验python中做上帝感觉--一切皆对象,处处是多态——面向对象