陶柏聿 2022-08-30 11:11 采纳率: 80%
浏览 114
已结题

基于CNN的轴承故障检测

 请问可以分享一下pytorch版的基于CNN的轴承故障诊断的源码嘛?我整了好久,处处都是问题,也不知道哪错了,我想学一下这个案例,求分享
我感觉我这个问题好像出在了输入维度那里,但是不这个维度的话会报错,计算出的output长这个样子

img


```python
class WDCNN(nn.Module):
    def __init__(self):
        super().__init__()
        # 输入1*2048*1
        self.layer1 = nn.Sequential(
            nn.Conv2d(
                in_channels=1,
                out_channels=16,
                kernel_size=(64, 1),
                stride=16,
                padding=24,
            ),  # 16*128*1
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=(2, 1), stride=(2)),  # 16*64*1
        )
        self.layer2 = nn.Sequential(
            nn.Conv2d(16, 32, kernel_size=(3, 1), stride=1, padding=1),  # 32*64*1
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=(2, 1), stride=(2)),  # 32*32*1
        )
        self.layer3 = nn.Sequential(
            nn.Conv2d(32, 64, kernel_size=(3, 1), stride=1, padding=1),  # 64*32*1
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=(2, 1), stride=(2)),  # 64*16*1
        )
        self.layer4 = nn.Sequential(
            nn.Conv2d(64, 64, kernel_size=(3, 1), stride=1, padding=1),  # 64*16*1
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=(2, 1), stride=(2)),  # 64*8*1
        )
        self.layer5 = nn.Sequential(
            nn.Conv2d(64, 64, kernel_size=(3, 1), stride=1, padding=1),  # 64*8*1
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=(2, 1), stride=(2)),  # 64*4*1
        )
        self.fc = nn.Sequential(nn.Linear(512, 100), nn.ReLU(), nn.Linear(100, 4))

    def forward(self, x):
        # print(x.size())
        x = self.layer1(x)
        # print(x.size())
        x = self.layer2(x)
        # print(x.size())
        x = self.layer3(x)
        # print(x.size())
        x = self.layer4(x)
        # print(x.size())
        x = self.layer5(x)
        # print(x.size())
        x = x.view(x.size(0), -1)
        x = self.fc(x)
        output = F.log_softmax(x, dim=1)
        # print(output)
        return output
epochs = 20  # 训练数据的轮次
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = WDCNN().to(device)
optimizer = optim.Adam(model.parameters())
train_X = train_X.reshape([5600, 1, 2048, 1])
valid_X = valid_X.reshape([1600, 1, 2048, 1])
test_X = test_X.reshape([800, 1, 2048, 1])

#训练
def train_model(model, device, train_X, optimizer, epoch):
    # 模型训练
    model.train()
    batchs = np.split(train_X, 28)  # 每批处理100个数据
    for batch_index, data in enumerate(batchs):
        # print(batch_index, data)
        #         print(data.size())
        target = train_Y[batch_index * 200 : batch_index * 200 + 200]
        # print(target)
        data = torch.tensor(data).to(device)

        target = torch.tensor(target).to(device)
        print(len(target))
        # print(data.size())
        print(data, target)
        # 梯度初始化为0
        optimizer.zero_grad()
        # 训练结果
        output = model(data).to(device)
        print(output)
        pred = output.argmax(dim=1)
        print(pred)
        # 计算损失 交叉熵损失(针对多分类问题)
        loss = F.cross_entropy(output, target).to(device)
        # print(loss)
        # 反向传播
        loss.backward()
        # 参数更新
        optimizer.step()

        if batch_index % 100 == 0:
            print("Train epoch:{} \t Loss:{:.6f}".format(epoch, loss.item()))
            train_loss_list.append(loss.item())

```

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-08-30 12:25
    关注

    此外,我还从CSDN技能树中找了一些相关资料给你, 你可以学习下:
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月18日
  • 已采纳回答 9月10日
  • 创建了问题 8月30日

悬赏问题

  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'