.generate文件 # import os 装载 os模块 import torch 引入一个torch包 import torchvision torchvision包是服务于pytorch深度学习框架的,用来生成图片,视频数据集,和一些流行的模型类和预训练模型 import torchvision.transforms as transforms 图像预处理包,包含了很多种对图像数据进行变换的函数 import matplotlib.pyplot as plt 图像可视化 import numpy as np 随机数 import sys sys模块包含了与Python解释器和它的环境有关的函数 import torch.nn as nn 搭建神经网络,torch.nn包中主要包含了用来搭建各个层的模块(Modules),比如全连接、二维卷积、池化等;torch.nn包中还包含了一系列有用的loss函数,这些函数也是在训练神经网络时必不可少的,比如CrossEntropyLoss、MSELoss等; import torch.nn.functional as F (通常导入到命名空间F中)中的函数替代我们手工编写的激活函数和损失函数来缩短代码。 torch.nn.functional子包中包含了常用的激活函数,如relu、leaky_relu、prelu、sigmoid等。 import torch.optim as optim optim包主要包含了用来更新参数的优化算法,比如SGD、AdaGrad、RMSProp、 Adam等 from PIL import Image 把PIL读取的图像转换成tensor,并归一化处理 from torch.utils.data import Dataset 读取数据 import scipy.io as io 实现对mat数据的读写 import random 随机数 from datetime import datetime 处理日期的标准模块
random.seed(datetime.now()) datetime是一个库是一个模块也是一个函数,返回系统时间
# ball_7 ball_7_0 = io.loadmat("./data/ball/122")['X122_DE_time'].tolist() 读取mat文件中的数据和时间,并用列表显示 ball_7_1 = io.loadmat("./data/ball/123")['X123_DE_time'].tolist() ball_7_2 = io.loadmat("./data/ball/124")['X124_DE_time'].tolist() ball_7_3 = io.loadmat("./data/ball/125")['X125_DE_time'].tolist() ball_7 = [ball_7_0, ball_7_1, ball_7_2, ball_7_3] 一个数据集,包括四组数据
print(len(all_data)) 输出所有数据的长度
#加载mat文件中特定的表,导入数据训练分类模型
def main(argv=None): main函数的固定写法,使其接受一个可选参数 argv,支持在交互式shell中调用该函数,可以动态地提供 argv 的值 classes = ( 加载mat文件中特定的表,并转换成一维数组,存入数据库 "normal", "ball_7", "ball_14", "ball_21", "inner_7", "inner_14", "inner_21", "outer_7", "outer_14", "outer_21", )
# classes = ("normal", "error") 将所有数据分为两类
train_pics = [] train_labels = [] test_pics = [] test_labels = []
for data_type in range(10): 从所有数据中随机选取十个数据 # 二类 if data_type == 0: 二分类问题,如果数据的标号为0,则其类型为0,没有故障,否则就是为1,有故障 the_type = 0 else: the_type = 1 data = all_data[data_type] 将该标号下的具体数据赋值给data
for load_type in range(4): load_data = data[load_type] max_start = len(load_data) - 4096 每份数据都是64×64的图片,需要用到4096个一维数据点,用max_start存储最大起始取值点 starts = [] starts保存用过的起始点,避免数据重复 for i in range(500): 设置i遍历个数 # 随机一个start,不在starts里,就加入 while True: start = random.randint(0, max_start) 从0到最大起始点中随机取一个数,存入start中 if start not in starts: 如果不在里面,就放进去 starts.append(start) break
# 将4096个数据点转化成64×64的二维图 temp = load_data[start : start + 4096] 从start开始,选取4096个数据,存入temp中 temp = np.array(temp) 将其变成二维数组 train_pics.append(temp.reshape(64, 64)) 把4096个数据点变成64×64的二位图片 train_labels.append(the_type) 将每一个图片打上标签,存入训练集标签中
现在,训练集已经生成了!步骤就是,先将数据进行分类,打包好,然后随机选取4096个数据点,要选很多,把它们变成二维图片,选数据点的时候要给每组数据的开头进行标号,防止重复选取。
for i in range(100): 用i遍历100个数 while True: start = random.randint(0, max_start) if start not in starts: starts.append(start) break temp = load_data[start : start + 4096] temp = np.array(temp) test_pics.append(temp.reshape(64, 64)) test_labels.append(the_type)
现在,测试集也已经生成了!
print("train_pics", len(train_pics)) 打印训练集和测试集的长度和标签
print("train_labels", len(train_labels))
print("test_pics", len(test_pics))
print("test_labels", len(test_labels))
np.savez("train_pics", *train_pics) 以“.npy”格式将数组保存到二进制文件中
np.savez("train_labels", *train_labels)
np.savez("test_pics", *test_pics)
np.savez("test_labels", *test_labels)
在运行结果中,一共出现了10组数据,每组都包括四个数,训练集的两个数和测试集的两个数。
这个文件就是数据预处理,主要作用就是把一维数据转化成二维图像,并创建训练集和测试集,以便于后面创建卷积神经网络时直接调用数据。
代码来源:
(1条消息) 一种基于卷积神经网络的数据驱动故障预测方法(含代码)_XD_onmyway的博客-CSDN博客_卷积神经网络预测代码