深度学习与电网信号故障诊断:基于卷积神经网络和残差网络的应用

news2024/12/26 9:18:26

在本文中,我们将探讨如何使用深度学习方法,特别是卷积神经网络(CNN)和残差网络(ResNet),来进行信号故障诊断。通过实践,我们将逐步演示如何加载数据、处理数据、建立模型并进行训练和评估。同时,我们还将展示如何通过LSTM网络来进行对比实验。

完整代码:基于卷积神经网络和残差网络的电网信号故障诊断

1. 项目背景

信号故障诊断在工业领域具有重要意义,通过分析传感器收集的信号数据,可以提前发现故障,避免设备损坏。传统的信号处理方法虽然有效,但在处理复杂、高维数据时显得力不从心。因此,深度学习特别是卷积神经网络(CNN)因其强大的特征提取能力逐渐成为故障诊断领域的主流技术。

在这个项目中,我们将使用一个多类故障数据集,利用深度学习模型来进行故障类型的分类,并评估模型的性能。

2. 数据预处理

数据加载是深度学习的基础。我们首先从CSV文件中加载数据,随后进行标签编码和特征缩放。

import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler

multi_data = pd.read_csv('./Data1.csv').iloc[0:4362, :]
multi_data['faultType'] = multi_data['G'].astype(str) + multi_data['C'].astype(str) + multi_data['B'].astype(str) + multi_data['A'].astype(str)
X = multi_data.drop(['G', 'C', 'B', 'A', 'faultType'], axis=1)
y = multi_data['faultType']

# 标签编码
le = LabelEncoder()
y = le.fit_transform(y)

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X = pd.DataFrame(X_scaled, columns=X.columns)

在上面的代码中,我们将多个故障信号拼接成一个字符串,作为标签。接下来对数据进行标准化处理,以保证特征在相同的数值范围内,这对于深度学习模型的收敛速度有很大帮助。

3. 卷积神经网络模型构建

我们使用卷积神经网络(CNN)进行特征提取和分类。CNN在处理时序数据时可以很好地提取局部特征,这使其成为信号处理任务的理想选择。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, Flatten, Dense

model = Sequential([
    Conv1D(64, 1, activation='relu', input_shape=(6, 1)),
    Conv1D(128, 1, activation='relu'),
    Flatten(),
    Dense(64, activation='relu'),
    Dense(4, activation='softmax')  # 假设有4种故障类型
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

我们构建了一个简单的CNN模型,使用两层卷积层和全连接层来提取数据的局部和全局特征。最后一层使用softmax函数输出故障分类结果。

4. 模型训练与评估

模型训练的关键是如何选择合理的超参数,例如批大小和学习率。在本文中,我们使用Adam优化器,并设置早停机制来防止模型过拟合。

history = model.fit(X_train, y_train, epochs=100, batch_size=64, validation_split=0.2)

模型训练完毕后,我们可以对其进行评估,查看模型的混淆矩阵、准确率等指标。

from sklearn.metrics import accuracy_score, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

y_pred = model.predict(X_test)
y_pred = np.argmax(y_pred, axis=1)
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, cmap='Blues', fmt='g')
plt.show()
print(f'Accuracy Score: {accuracy_score(y_test, y_pred)*100:.2f}%')
5. 残差网络的引入

残差网络(ResNet)通过引入残差块解决了深层网络中的梯度消失问题,使得网络可以更快、更深地训练。我们构建了一个简单的残差网络模型。

from tensorflow.keras.layers import Add, BatchNormalization, Activation

def residual_block(x, filters, kernel_size):
    shortcut = x
    x = Conv1D(filters, kernel_size=kernel_size, padding='same')(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    x = Conv1D(filters, kernel_size=kernel_size, padding='same')(x)
    x = BatchNormalization()(x)
    if shortcut.shape[-1] != filters:
        shortcut = Conv1D(filters, 1)(shortcut)
    x = Add()([x, shortcut])
    return x

通过多层残差块,模型在特征提取的同时保留了原始输入信息,使得训练更加稳定。

6. 学习曲线分析

为了进一步分析模型的表现,我们绘制了学习曲线和损失曲线,观察模型在训练过程中的变化趋势,识别可能出现的过拟合现象。

plt.plot(history.history['loss'], label='Training Loss')
plt.plot(history.history['val_loss'], label='Validation Loss')
plt.title('Model Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.show()
7. 多分类ROC和PR曲线

为了更好地评估分类器的表现,我们绘制了多分类的ROC和PR曲线,这些曲线可以帮助我们深入理解模型在不同类别上的表现。

from sklearn.metrics import roc_curve, auc
from itertools import cycle

# 计算每个类别的ROC曲线和AUC
fpr, tpr, roc_auc = dict(), dict(), dict()
for i in range(n_classes):
    fpr[i], tpr[i], _ = roc_curve(y_test_bin[:, i], y_score[:, i])
    roc_auc[i] = auc(fpr[i], tpr[i])

# 绘制ROC曲线
for i, color in zip(range(n_classes), cycle(['blue', 'red', 'green', 'yellow'])):
    plt.plot(fpr[i], tpr[i], label=f'Class {i} ROC curve (area = {roc_auc[i]:0.2f})')
plt.plot([0, 1], [0, 1], 'k--')
plt.legend()
plt.show()
8. 结论

通过本文的实践,我们可以看到卷积神经网络和残差网络在处理信号故障诊断问题上的强大表现。我们通过合理的数据预处理、模型构建与超参数调整,成功实现了高准确率的分类结果。在未来的工作中,我们可以尝试进一步优化模型结构,引入更多的时序模型(如LSTM)来提升模型性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2103674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

axios设置responseType: ‘blob‘,获取接口返回的错误信息

在axios的请求中当后端接口返回的是文件流的情况下,我们需要在请求参数里面设置responseType: blob,如果接口报错,默认前端无法获取后端返回的错误信息。 解决方法:通过FileReader获取错误信息 async handleFetch() {const res aw…

59.以太网数据回环实验(2)硬件资源梳理及系统框图

硬件资源梳理介绍: 升腾开发板使用的以太网PHY芯片型号为RTL8211F,是低功耗10-BASE/100-BASE/1000-BASE全双工以太网PHY层芯片,支持 10Mbps、100Mbps 和 1000Mbps以太网通信。I/O 引脚电压可变,符合 IEEE802.3-2005 标准&#xff…

2024.09.04【读书笔记】|如何使用Tombo进行Nanopore Direct RNA-seq(DRS)分析

文章目录 Tombo快速使用介绍模型介绍RNA修饰分析步骤特异性替代碱基检测(推荐)De novo canonical model comparison ONT全长转录组分析步骤疑难解答Minimap2在比对nanopore直接RNA-seq数据时的最佳实践和参数设置有哪些?featureCounts在进行R…

--- 数据结构 栈 --- java

栈 只允许在一个方向上进行数据的插入和删除操作,进行删除和插入操作的一端叫做栈顶,另一端叫做栈尾 压栈 将数据插入到栈当中,入数据的位置是栈顶 出栈 将数据从栈中弹出(删除),弹出的方向是在栈顶 栈…

【持续更新】Adobe Audition 2024 (v24.4.1.003)最新免费修改版

Adobe Audition是一款专为录音、编辑和掌握音频素材设计的专业解决方案。此编辑器支持从MP3、AAC到AIFF等多种重要格式,并能从CD中导入音轨。 其多轨编辑功能使您可以在任意数量的轨道上混合音乐、语音和声音片段,运用丰富的工作室动态效果,如…

光盘安全隔离与信息单向导入系统-信刻

信刻从用户需求出发,为更多用户提供安全可靠的跨网数据单向导入/导出光盘摆渡系统解决方案,解决内外网数据交换的问题,确保数据交换过程的安全性。 公司所研发出的光盘安全隔离与信息单向导入系统依托软硬件相结合的技术,集策略摆…

实训day39(8.29)

一、harbor私有仓库管理 是python的包管理工具,和yum对redhat的关系是一样的 yum -y install epel-release yum -y install python2-pip pip install --upgrade pip pip list pip 8x pip install --upgrade pip pip install --upgrade pip20.3 -i https://mirr…

HTTP 之 消息结构(二十二)

HTTP(超文本传输协议)是一种用于传输超媒体文档的协议,它定义了客户端和服务器之间请求和响应的消息结构。HTTP消息由一系列标准头部字段、一个空行和可选的消息体组成。 客户端请求消息 请求消息包括以下格式:请求行(…

视频合并在线工具哪个好?好用的视频合并工具推荐

当我们手握一堆零散却各有千秋的视频片段时,是否曾幻想过它们能像魔法般合并成一部完整、流畅的故事? 别担心,今天咱们就来一场“视频合并大冒险”,揭秘几款视频合并软件手机免费工具,帮助你在指尖上实现创意无限的视…

进来一起把【数据结构】的【栈与队列】狠狠玩弄,痛快到大汗淋漓

1前言:顾名思义,栈与队列是两个东西,栈和队列!对的,栈和队列!!,没错,在念一遍,【栈】 和 【队列】!!!但是本质都是差…

Docker 部署 Mysql (图文并茂超详细)

部署 MYSQL ( Docker ) [Step 1] : 拉取 MYSQL 镜像 docker pull mysql:8.0.33[Step 2] : 创建 MYSQL 相关目录 ➡️ 启动 MYSQL 容器 ➡️ 拷贝文件 ➡️ 授权文件夹 ➡️ 删除容器 # 创建 MYSQL 相关目录 mkdir -p /data/mysql/{conf,log,data}# 启动 MYSQL 容器 docker r…

MES系统:优化生产流程,产品质量与追溯性

MES系统(Manufacturing Execution System,制造执行系统)在实现产品质量管理方面发挥着重要作用。它通过集成生产过程的各种数据和功能,帮助企业提升产品质量、降低不良率,并确保生产过程的稳定性和一致性。以下是万界星…

开源云原生数据库PolarDB PostgreSQL 15兼容版本正式发布

开源云原生数据库PolarDB PostgreSQL 15兼容版正式发布上线,该版本100%兼容开源PostgreSQL 15。PolarDB是阿里云自研云原生关系型数据库,基于共享存储的存算分离架构使其具备灵活弹性和高性价比的特性,在开源PostgreSQL很好的性能表现的基础上…

AI绘画界的赛博佛祖,开源最强SD3它来了!(整合包)

前言 全网期待已久的SD3终于和大家见面了。这款以Stable Diffusion为基础,进一步优化和升级的模型,无疑将会深刻地又又又一次改变AI绘画界! 这次发布的是Medium版本,在多个方面展现出惊人的能力和效率,堪称开源最强&…

多线程篇(可见性 原子性 有序性(有序性))(持续更新迭代)

目录 一、指令重排序(并发编程之美) 二、指令重排序(百度) 1. 为什么需要指令重排序 2. 什么是指令重排序 3. 指令重排序分类 3.1. 编译器优化重排序 3.2. 指令级并行的重排序 3.3. 内存系统的重排 4. 指令重排序规范 4…

【AI工作流】未来的我将何去何从?亲身感受!

在这个瞬息万变的科技时代,人工智能(AI)已经成为推动各行各业变革的核心动力。随着AI技术的不断进步,工作流程的智能化正在悄然改变我们的生活和工作方式。那么,未来的我将何去何从?这是一个值得深思的问题…

揭秘!焦虑症背后的隐形推手:气血不足,你了解多少?

在这个快节奏、高压力的时代,焦虑症似乎成了许多人心头挥之不去的阴霾。失眠、心悸、易怒、持续担忧……这些症状不仅影响着我们的生活质量,更在无形中侵蚀着我们的身心健康。然而,你是否知道,这些看似心理层面的困扰,…

springboot高校实验室教学管理系统的设计和实现

基于springbootvue高校实验室教学管理系统的设计和实现(源码L文ppt)4-045 4 系统总体设计 此次高校实验室教学管理系统通过springboot框架。springboot适合快速构建Web应用。springboot将B/S设计模式中的视图分成了View模块和Template模块两部分,将动态的逻辑处理…

如何获取本地时区名称:JavaScript 实用技巧

如何获取本地时区名称:JavaScript 实用技巧 在现代 web 开发中,处理日期和时间是一个常见的需求。尤其是在涉及到用户的本地时间时,正确获取时区信息显得尤为重要。在这篇博客中,我们将探讨如何使用 JavaScript 获取本地时区名称…

数学基础(四)

一、特征值与特征向量 特征空间: 特征向量的应用: 特征值表达了重要程度且和特征向量所对应,那么特征值大的就是主要信息了,基于这点我们可以提供各种有价值的信息。 二、SVD矩阵分解 基变换: 特征值分解&#xff…