一维卷积神经网络直接读取mat文件并进行数据增强和归一化

2023-11-20

  众多师弟师妹在使用一维卷积神经网络对凯斯西储,哥伦比亚等大学开源的轴承故障数据集进行故障诊断时,不知道该怎么把Matlab文件中的数据直接导进伸进网络进行训练。
   我之前也不会,我一直用matlab打开数据然后黏贴到EXCEL再进行数据增强和归一化,最终保存成CSV格式。在训练神经网络的时候直接读取归一化好的数据进行训练,虽然这样比较直观,而且只做一次数据集就可以满足所有形式神经网络的训练。
   但是,如果要研究自己发论文所提出来的神经网络模型的泛化能力、抗噪声能力、超参数寻优等问题的时候可能要不停的重新制作加噪声的数据集等等,这时候就比较麻烦。
   因此,本人自己编写了一段数据处理的代码,包括归一化,代码如下所示:    

众多师弟师妹在使用一维卷积神经网络对凯斯西储,哥伦比亚等大学开源的轴承故障数据集进行故障诊断时,不知道该怎么把Matlab文件中的数据直接导进伸进网络进行训练。
我之前也不会,我一直用matlab打开数据然后黏贴到EXCEL再进行数据增强和归一化,最终保存成CSV格式。在训练神经网络的时候直接读取归一化好的数据进行训练,虽然这样比较直观,而且只做一次数据集就可以满足所有形式神经网络的训练。
但是,如果要研究自己发论文所提出来的神经网络模型的泛化能力、抗噪声能力、超参数寻优等问题的时候可能要不停的重新制作加噪声的数据集等等,这时候就比较麻烦。
因此,本人自己编写了一段数据处理的代码,包括归一化,代码如下所示:

# -*- coding: utf-8 -*-
"""
Created on Tue Oct  5 14:21:26 2021

@author: Hebei University of Engineering
"""
import numpy as np
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import LSTM,Input,add,Dense,AveragePooling1D, Activation, Flatten, Convolution1D, Dropout,MaxPooling1D,BatchNormalization,GlobalAveragePooling1D,ZeroPadding1D
import tensorflow as tf#将tensorflow命名为tf
from keras.models import Sequential#导入序列函数
from keras.wrappers.scikit_learn import KerasClassifier#导入分类标签显示工具
from keras.utils import np_utils,plot_model#导入独热吗部分编辑函数
from sklearn.model_selection import cross_val_score,train_test_split,KFold#导入独热吗部分编辑函数
from sklearn.preprocessing import LabelEncoder#导入独热吗部分编辑函数
from keras.models import load_model#导入保存模型工具
from keras.models import model_from_json#导入保存模型工具
import matplotlib.pyplot as plt#导入画图工具
from sklearn.metrics import confusion_matrix#导入混淆矩阵,这段代码用不上
import itertools#这个我忘记了
from keras import layers#导入层
from keras.optimizers import SGD#导入优化器
import scipy.io as scio
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
data1 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata1')['DA09'] 
data2 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata2')['DA09']
data3 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata3')['DA09']
data4 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata4')['DA09'] 
data5 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata5')['DA09']
data6 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata6')['DA09']
data7 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata7')['DA09']
data8 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata8')['DA09']
data9 = scio.loadmat('C:/Users/1/Desktop/大论文作图/mydata9')['DA09']


 
#由于凯斯西储大学的轴承故障数据集(字典格式)中包含多个键['X097_DE_time']
#L=list()
 
def ber(data,windowlen,buchang):
    p=len(data)
    L=list()
    q=(p-windowlen)
    for i in range(q):
        if  int(i) % int(buchang) == 0:
            a=data[i:i+windowlen]          
            L.append(a)
    return L

def data(data,windowlen,buchang,biaoqian):
    data=ber(data,windowlen,buchang)
    data=np.array(data)
    x,y,z=data.shape
    c=data.reshape(x,y)
    for i in range(x):
        c1=c[i,:]
        pingjunzhi=np.mean(c1)
        c2=c1-pingjunzhi
        c3=max(abs(c2))
        c1=c2/c3
        c[i,:]=c1
    k=np.zeros((x,1))+biaoqian
    KK=np.hstack([c,k])
    print(k)
    print(KK.shape)
    return KK
    
yb1=data(data1,1024,24,1)
yb2=data(data2,1024,24,2)
yb3=data(data3,1024,24,3)
yb4=data(data4,1024,24,4)
yb5=data(data5,1024,24,5)
yb6=data(data6,1024,60,6)
yb7=data(data7,1024,72,7)
yb8=data(data8,1024,72,8)
yb9=data(data9,1024,72,9)

L3=np.vstack([yb1,yb2,yb3,yb4,yb5,yb6,yb7,yb8,yb9])
X = np.expand_dims(L3[:, 0:1024].astype(float), axis=2)#每行的1-1024列作为训练数据
Y = L3[:, 1024]#每行的第1025列作为训练标签

encoder = LabelEncoder()
Y_encoded = encoder.fit_transform(Y)
Y_onehot = np_utils.to_categorical(Y_encoded)
 
#划分数据集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y_onehot, test_size=0.3, random_state=0)
 

seed = 7
np.random.seed(seed)
 
def Conv2d_BN(x, nb_filter,kernel_size, strides=1, padding='same',name=None):
    if name is not None:
        bn_name = name + '_bn'
        conv_name = name + '_conv'
    else:
        bn_name = None
        conv_name = None
 
    x = Convolution1D(nb_filter,kernel_size,padding=padding,strides=strides,activation='tanh',name=conv_name)(x)
    x = MaxPooling1D(pool_size=2,strides=1,padding='same')(x)
    x = BatchNormalization(axis=1,name=bn_name)(x)
    return x
 
def Conv_Block(inpt,nb_filter,kernel_size,strides=1, with_conv_shortcut=False):
    x = Conv2d_BN(inpt,nb_filter=nb_filter,kernel_size=1,strides=strides,padding='same')
    x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=3, padding='same')
    x = Conv2d_BN(x, nb_filter=nb_filter, kernel_size=1, padding='same')
    if with_conv_shortcut:
        shortcut = Conv2d_BN(inpt,nb_filter=nb_filter,strides=strides,kernel_size=kernel_size)
        x = add([x,shortcut])
        return x
    else:
        x = add([x,inpt])
        return x
 
inpt = Input(shape=(1024,1))
x = ZeroPadding1D(3)(inpt)
x = Dropout(0.5)(x)
x = Conv2d_BN(x,nb_filter=16,kernel_size=64,strides=8,padding='same')
x = Conv_Block(x,nb_filter=32,kernel_size=32,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Conv_Block(x,nb_filter=64,kernel_size=3,strides=1,with_conv_shortcut=True)
x = Flatten()(x)
x = BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)(x) 
x=Dense(100,activation='tanh')(x)
x = BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)(x) 
x=Dropout(0.5)(x)
x=Dense(60,activation='tanh')(x)
x = BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)(x) 
x=Dropout(0.5)(x)
x = Dense(9,activation='softmax')(x)

from keras.models import Model 
model = Model(inputs=inpt,outputs=x)
model.summary()

model.compile(loss='categorical_crossentropy',optimizer='adam', metrics=['accuracy'])

from keras.callbacks import TensorBoard
import time
import keras
model_name = "模型名-{}".format(int(time.time()))
tensorboard = TensorBoard(log_dir='logs'.format(model_name),write_images='Ture')
tensorboard=keras.callbacks.TensorBoard(histogram_freq=1)
history=model.fit(X_train, Y_train,epochs=600,validation_data=(X_test, Y_test),batch_size=512,callbacks=[tensorboard])
#训练批量大小和批次
#history=model.fit(X_train, Y_train,epochs=100,validation_data=(X_test, Y_test),batch_size=64)

#model.save('C:/Users/1/Desktop/加速度传感器4.h5')
model_json =model.to_json()
with open('C:/Users/1/Desktop/大论文作图/传感器9', 'w')as json_file:
    json_file.write(model_json)# 权重不在json中,只保存网络结构
model.save_weights('C:/Users/1/Desktop/大论文作图/传感器9.json.h5')
#画出损失函数图
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.plot(history.history['loss'],'_',label='train_loss')
plt.plot(history.history['val_loss'],':',label='val_loss')
plt.plot(history.history['accuracy'],'.',label='train_acc')
plt.plot(history.history['val_accuracy'],'r',label='val_acc')
plt.show()

los=history.history['val_loss']
Aos=history.history['val_accuracy']
a=history.history['loss']
b=los=history.history['val_loss']
print(b)

有人要问没看见给形成的数据进行打乱顺序,这一点不用担心,在代码的第90行,划分数据集的时候是随机选择并打乱顺序的。

省刊
核心
EI
SCI
师弟师妹赶紧发吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一维卷积神经网络直接读取mat文件并进行数据增强和归一化 的相关文章

  • 图像增强 - 从书写中清除给定图像

    我需要清理这张照片 删除 清理我 的字样并使其变亮 作为图像处理课程作业的一部分 我可能会使用 matlab 函数 ginput 来查找图像中的特定点 当然 在脚本中您应该对所需的坐标进行硬编码 您可以使用 conv2 fft2 ifft2
  • matlab矩阵中求子矩阵的通用方法

    我正在寻找一种 好 方法来在更大的矩阵 任意维数 中找到矩阵 模式 Example total rand 3 4 5 sub total 2 3 1 3 3 4 现在我希望这样的事情发生 loc matrixFind total sub 在
  • 将 3d 矩阵重塑为 2d 矩阵

    我有一个 3d 矩阵 n by m by t 在 MATLAB 中表示n by m一段时间内网格中的测量值 我想要一个二维矩阵 其中空间信息消失了 只有n m随着时间的推移测量t剩下 即 n m by t 我怎样才能做到这一点 你需要命令r
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • MATLAB 图中轴标签与轴之间的距离

    我正在使用 MATLAB 绘制一些数据 我想调整轴标签与轴本身之间的距离 但是 只需向标签的 位置 属性添加一点即可使标签移出图窗窗口 是否有 保证金 属性或类似的东西 在上图中 我想增加数字和标签 Time s 之间的距离 同时自动扩展数
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 作为动画的八度情节点

    我有以下八度脚本 TOTAL POINTS 100 figure 1 for i 1 TOTAL POINTS randX rand 1 randY rand 1 scatter randX randY hold on endfor 当我运
  • 从 Java 运行 MATLAB 函数

    我在 MATLAB 中有一个 m 文件 我想从 Java 调用该文件 并以字符串或 Java 中的任何形式获取解决方案 这听起来很简单 但由于某种原因我无法让它发挥作用 我试过这个 matlab nosplash wait nodeskto
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 将数据提示堆栈放在轴标签顶部,并在轴位置发生更改后更新轴标签

    此问题仅适用于 unix matlab Windows 用户将无法重现该问题 我在尝试创建位于 y 轴标签顶部的数据提示时遇到问题 下图很能说明问题 正如您所看到的 在 ylabel 附近创建的数据提示将到达 ylabel 文本的底部 而期
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 在matlab中,如何读取python pickle文件?

    在 python 中 我生成了一个 p 数据文件 pickle dump allData open myallData p wb 现在我想在Matlab中读取myallData p 我的Matlab安装在Windows 8下 其中没有Pyt

随机推荐

  • 包管理工具那么多,怎么选?npm、yarn 和 pnpm 三者比较及使用详解!

    1 简介 在 Vue 项目中 我们需要使用许多第三方依赖库 如 Vue Router Vuex Axios Element UI 等等 这些依赖库通常以 NPM 包的形式提供 而且在使用时需要进行版本管理 因此 我们需要使用一个包管理工具来
  • TCP/IP详解 第十二章(2) linux 网络编程

    转载请声明博主https mp csdn net console editor html 106517098 一 Linux网络概述 LINUX网络优势 1 完善的内置网络 和内核结合在一起的网络部分 I p queue 2 Linux 免
  • python将超大CSV文件切割为多个Excel文件存储

    很多时候处理数据会碰到CSV文件 如果是一般的少量文件问题不大 一旦碰到大型的CSV文件 就会出现打不开文件的结果 因为文本无法打开超大型文件 Excel也最多能够容量一百万条数据量 因此只能将CSV文件切割成为多个小的CSV文件 将csv
  • Swing之Jframe窗体、 JDialog弹窗、标签、面板、按钮(图片按钮,单选框,多选框)、列表(下拉框,列表框)、文本框、密码框

    Swing Jframe窗体 import javax swing import java awt public class JFrameDemo init 初始化 public void init JFrame frame new JFr
  • Vue 组件化

    什么是组件化 任何一个人处理信息的逻辑能力都是有限的 所以 当面对一个非常复杂的问题时 我们不太可能一次性搞定一大堆的内容 但是 我们人有一种天生的能力 就是将问题进行拆解 如果将一个复杂的问题 拆分成很多个可以处理的小问题 再将其放在整体
  • 每月的倒扣料

    这是一个生产领料的典型 倒扣法 即BOM配置的单位和发料单位不相同时 我们不可能通过转换而达到发料的方便 比较典型的物料有 电线 按米领料 发料时要按捆化工 按kg领料 发料时按桶等等 通常在实施的时候 先将一捆电线调拔到线边仓库 仓管操作
  • 利用人工智能技术普及教学应用、拓展教师研训应用、增强教育系统监测能力

    2019年 中国教育现代化2035 指出 以人才培养为核心 通过提升校园智能化水平 探索新型教学形式 创新教育服务业态 推进教育治理方式变革 智能驱动教育创新发展 2021年教育部等六部门发布 关于推进教育新型基础设施建设构建高质量教育支撑
  • Linux C/C++编程:对文件操作的封装

    Linux C C 编程 lseek fseek ftell rewind fgetpos fsetpos 源码 Created by oceanstar on 2021 8 9 ifndef OCEANSTAR HTTP ACL FILE
  • 企业网上订货管理软件构架源码系统介绍

    企业网上订货管理软件构架源码系统介绍 手机订单管理系统 一 什么是订货通 什么是企业订货管理系统 是一款针对中小型企业通过网络实现 厂家和客户 经销商 批发商 代理商一站式订货系统 最终实现厂家的下游客户通过网络实现实时订货功能 二 订货通
  • 惊艳了!升级版的 APDrawing,秒让人脸照变线条肖像画

    作者 高卫华 出品 AI科技大本营 随着深度学习的发展 GAN模型在图像风格转换的应用越来越多 其中不少都实现了很好的效果 此前 reddit上的一个技术博主AtreveteTeTe基于GAN模型混合将普通的人像照片卡通化 并通过First
  • AJAX——AJAX的异步与同步、AJAX代码封装

    个人主页 胖虎不秃头 个人简介 Java领域新星创作者 随时准备跑路的大二学生 精品专栏 有这一个就够了 个人名言 知道的越多 不知道的越多 刷题神器 推荐一款算法刷题网站Nowcoder 点击跳转刷题网站进行注册学习 文章目录 AJAX的
  • 可以通过2种方法遍历HashMap

    可以通过2种方法遍历HashMap Map map new HashMap for Iterator iter map entrySet iterator iter hasNext Map Entry entry Map Entry ite
  • 裁剪任意直线段 liang-barshky算法 c

    一 实验目的 使用liang barshky算法实现裁剪任意直线段实验工具 二 实验工具 VC6 0 三 实验步骤 思想 以直线的参数方程为基础 X x1 u x2 x1 Y y1 u y2 y1 裁剪区域是不等式 wxl lt X x1
  • 100天精通Python(可视化篇)——第99天:Pyecharts绘制多种炫酷K线图参数说明+代码实战

    文章目录 专栏导读 一 K线图介绍 1 说明 2 应用场景 二 配置说明 三 K线图实战 1 普通k线图 2 添加辅助线 3 k线图鼠标缩放 4 添加数据缩放滑块 5 K线周期图表 书籍推荐 专栏导读 本文已收录于 100天精通Python
  • linux 积累

    linux文件夹打包命令 tar 解包 tar xvf FileName tar 打包 tar cvf FileName tar DirName 注 tar是打包 不是压缩 gz 解压1 gunzip FileName gz 解压2 gzi
  • 重用的undo日志 (3)—mysql进阶(六十六)

    前面说了undo日志的文件格式 第一页和后面的页是不同的 填入undo日志之前 会先把undo page header属性填满 还有undo segment header undo log header List base node存在un
  • Open Camera异常分析(一)

    负责的项目中遇到一些三方和其他的场景使用camera导致问题 并且没有及时释放camera device致使手机camera应用一直无法使用的严重问题 针对这类问题进行了一系列的分析与追踪 最后算是定位到了问题且提供了一些解决方案 但整个追
  • 编程题——连续最大和

    编程题 连续最大和 题目描述 一个数组有 N 个元素 求连续子数组的最大和 例如 1 2 1 和最大的连续子数组为 2 1 其和为 3 输入描述 输入为两行 第一行一个整数n 1 lt n lt 100000 表示一共有n个元素 第二行为n
  • 拼多多anti-token 字段加解密学习分析

    注 本篇文章仅学习交流该APP的加密方法 提示我们的安全技术 不可以对该app和公司造成违法行为 否则后果自负 如有侵权行为 烦请贵司与我第一时间联系 下架文章 感谢 app 版本 6 26 我们抓包得到这里有个关键字段 anti toke
  • 一维卷积神经网络直接读取mat文件并进行数据增强和归一化

    众多师弟师妹在使用一维卷积神经网络对凯斯西储 哥伦比亚等大学开源的轴承故障数据集进行故障诊断时 不知道该怎么把Matlab文件中的数据直接导进伸进网络进行训练 我之前也不会 我一直用matlab打开数据然后黏贴到EXCEL再进行数据增强和归