基于神经网络的变压器故障分类诊断

一.绪论

变压器是电力系统中分布广泛、造价昂贵、结构复杂的电气设备,其在电能传送和电压转换方面承担着至关重要的任务。它的正常运行直接关系到整个电力系统的安全性和稳定性。对于油浸式变压器而言,随着运行的持续,变压器油与其中的固体有机材料会逐渐发生老化和分解。由于不同类型的故障会导致油中产生不同类型的气体,通过对油中气体的分析,我们可以有效地判断变压器的故障类型。

油浸式变压器的运行过程中,油与固体有机材料的老化和分解是一个自然而不可避免的过程。由于不同类型的故障引起的油中气体产生量和比例各异,因此通过对油中气体的详细分析,我们能够准确地识别变压器可能存在的问题。这种方法为我们提供了一种可靠的手段,以便及时发现并解决潜在的故障,确保变压器的可靠运行。

值得注意的是,油中气体分析技术的应用不仅仅在于检测故障,更重要的是在于预防性维护。通过定期对变压器油中气体进行监测和分析,我们能够及时发现变压器内部可能存在的问题,采取预防措施,延长变压器的使用寿命,提高电力系统的可靠性。

油浸式变压器的正常运行对电力系统至关重要。通过对变压器油中气体的分析,我们可以在故障发生前及时识别问题,实现预防性维护,确保电力系统的安全性和稳定性。这种先进的监测技术为电力设备的管理和维护提供了有力支持,为电力系统的可靠运行保驾。

本文将使用神经网络来对变压器故障来进行分类诊断。

二.实验数据

三.模型架构可视化

自己搭建模型以及可视化

四.代码

class model(nn.Module):
    def __init__(self, input_size, hidden_size, num_classes):
        super(model, self).__init__()
        self.model = nn.Sequential(
            nn.Linear(input_size,hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size,hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size,hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, hidden_size),
            nn.ReLU(),
            nn.Dropout(0.2),
            nn.Linear(hidden_size, num_classes),
            nn.Softmax(dim=1)
        )
    def forward(self, x):

        x = self.model(x)
        return x
#train
from torch.utils.data import DataLoader
from data.dataset import dataset,data_split
from model import model
import torch.optim as optim
import torch
import wandb
import os

# Initialize wandb
os.environ["WANDB_API_KEY"] = ''
os.environ["WANDB_MODE"] = "offline"

wandb.init(project='model', name='best2')



if __name__ == "__main__":
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')

    result_data = dataset('data/a.csv',if_normalize=True)
    data_train, data_test = data_split(result_data, 0.8)
    train_data = DataLoader(data_train, batch_size=512, shuffle=True)
    test_data = DataLoader(data_test, batch_size=1, shuffle=True)

    epochs = 15000
    input_size = 5
    hidden_size = 256
    output_size = 7
    lr = 0.001

    model = model(input_size, hidden_size, output_size).to(device)
    optim = optim.Adam(model.parameters(), lr=lr)
    loss_func = torch.nn.CrossEntropyLoss()

    for epoch in range(epochs):
        train_loss = 0
        train_corrects = 0
        num_batches = len(train_data)

        for i, (inputs, labels) in enumerate(train_data):
            model.train()
            inputs = inputs.to(device)
            labels = labels.to(device)

            out = model(inputs)
            loss = loss_func(out, labels)
            train_loss += loss.item()

            # 计算train的准确率
            prediction = torch.max(out, 1)[1]
            train_corrects += torch.sum(prediction == labels).item()

            optim.zero_grad()
            loss.backward()
            optim.step()

        avg_train_loss = train_loss / num_batches
        train_acc = train_corrects / len(data_train)

        if epoch % 10 == 0:
            model.eval()
            with torch.no_grad():
                test_loss = 0
                total = len(data_test)
                test_corrects = 0

                for i, (data, labels) in enumerate(test_data):
                    data = data.to(device)
                    labels = labels.to(device)

                    outputs = model(data)
                    loss = loss_func(outputs, labels)
                    test_loss += loss.item()

                    prediction = torch.max(outputs, 1)[1]
                    test_corrects += torch.sum(prediction == labels).item()

                avg_test_loss = test_loss / len(test_data)
                test_acc = test_corrects / total
                print(
                    f"Epoch {epoch + 1}, Training Loss: {avg_train_loss}, Train Acc: {train_acc}, Test Loss: {avg_test_loss}, Test Acc: {test_acc}")
                #保存模型
                torch.save(model.state_dict(), 'save/model.pt')
                # Log to wandb
                wandb.log({"Train Loss": avg_train_loss, "Train Acc": train_acc,
                           "Test Loss": avg_test_loss, "Test Acc": test_acc})
    wandb.finish()

五.实验结果

其中我把训练数据都上传到了wandb

其中做了四个不同版本,准确率从30%提甚至90%左右。

项目链接Hjananggch/Fault-classification-and-diagnosis-of-transformer-equipment-based-on-neural-network: 变压器是电力系统中分布广泛、造价昂贵、结构复杂的电气设备,担负着电能传送和电压转换的重任,其正常运行直接影响了整个电力系统的安全性和稳定性。对油浸式变压器来说,随着运行的持续,油与中间的固体有机材料会逐渐老化和分解,由于不同的故障类型,产生的气体含量和比例也不同,所以可利用对油中气体的分析,来判断故障类型。本文来自http://t.csdnimg.cn/huemW (github.com)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值