一维(1D)CNN模型下轴承故障诊断(Python,TensorFlow框架下,很容易改为其它模型,解压缩后可以直接运行,无需修改任何目录)

文章介绍了使用凯斯西储大学轴承数据集进行故障检测研究,采用1DCNN模型并利用数据增强技术,如重叠切割,对不同负载和故障状态的数据进行处理。在0HP到3HP数据集中,测试集准确率介于99.46%至100.00%,显示出模型的良好性能。实验基于TensorFlow2.4.0和Python3.6.0环境。
摘要由CSDN通过智能技术生成

1.数据集

使用凯斯西储大学轴承数据集,一共有4种负载下采集的数据,每种负载下有10种 故障状态:三种不同尺寸下的内圈故障、三种不同尺寸下的外圈故障、三种不同尺寸下的滚动体故障和一种正常状态。

 2.模型(1DCNN)

使用数据增强的方式:重叠切割(每个样本长度是1024)

 

 

3.效果

0HP数据集(训练集与测试集比例为7:3),测试集准确率为100.00%

C%  

 

 

 

 

1HP数据集(训练集与测试集比例为7:3),测试集准确率为99.46%

 

 

 

 

 2HP数据集(训练集与测试集比例为7:3),测试集准确率为99.83%

 

 

 

 

 3HP数据集(训练集与测试集比例为7:3),测试集准确率为100.00% 

 

 

 

 

 

 

代码运行环境要求

tensorlfow>=2.4.0

python>=3.6.0,

其他库版本无要求

 对代码和数据感兴趣的可以关注

 


import os
import sys
from scipy.io import loadmat
import numpy as np
import pandas as pd
import torch
from sklearn.model_selection import train_test_split
from tqdm import tqdm
from pandas import DataFrame
import code
import tensorflow as tf
from keras.utils import np_utils
from matplotlib import pyplot as plt
#压缩包:https://mbd.pub/o/bread/mbd-ZJyUm5Zs

 

对于一维CNN轴承故障诊断,可以使用PyTorch来实现。以下是一个示例代码,可以用于训练和测试一个基本的一维CNN模型来诊断轴承故障。 ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset # 定义一维CNN模型 class CNNModel(nn.Module): def __init__(self): super(CNNModel, self).__init__() self.conv1 = nn.Conv1d(in_channels=1, out_channels=16, kernel_size=3) self.relu = nn.ReLU() self.pool = nn.MaxPool1d(kernel_size=2) self.fc = nn.Linear(16, 2) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = torch.flatten(x, 1) x = self.fc(x) return x # 定义训练集和测试集的数据加载器 class BearingDataset(Dataset): def __init__(self, data, labels): self.data = data self.labels = labels def __getitem__(self, index): return self.data[index], self.labels[index] def __len__(self): return len(self.data) # 定义训练函数 def train(model, train_loader, criterion, optimizer, device): model.train() running_loss = 0.0 for inputs, labels in train_loader: inputs = inputs.to(device) labels = labels.to(device) optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() * inputs.size(0) epoch_loss = running_loss / len(train_loader.dataset) return epoch_loss # 定义测试函数 def test(model, test_loader, criterion, device): model.eval() running_loss = 0.0 correct = 0 total = 0 with torch.no_grad(): for inputs, labels in test_loader: inputs = inputs.to(device) labels = labels.to(device) outputs = model(inputs) loss = criterion(outputs, labels) running_loss += loss.item() * inputs.size(0) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() epoch_loss = running_loss / len(test_loader.dataset) accuracy = correct / total return epoch_loss, accuracy # 加载数据并进行预处理 train_data = torch.Tensor(...) # 训练集数据,维度为 [样本数, 特征数, 信号长度] train_labels = torch.LongTensor(...) # 训练集标签,维度为 [样本数] test_data = torch.Tensor(...) # 测试集数据,维度为 [样本数, 特征数, 信号长度] test_labels = torch.LongTensor(...) # 测试集标签,维度为 [样本数] train_dataset = BearingDataset(train_data, train_labels) test_dataset = BearingDataset(test_data, test_labels) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=32, shuffle=False) # 定义设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 创建模型实例 model = CNNModel() model.to(device) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练和测试模型 num_epochs = 10 for epoch in range(num_epochs): train_loss = train(model, train_loader, criterion, optimizer, device) test_loss, test_accuracy = test(model, test_loader, criterion, device) print(f"Epoch {epoch+1}/{num_epochs} - Train Loss: {train_loss:.4f} - Test Loss: {test_loss:.4f} - Test Accuracy: {test_accuracy:.4f}") ``` 请注意,上述代码只是一个简单的示例,你需要根据你的数据和问题适当进行修改和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习的奋斗者

你的鼓励是我努力的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值