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

pytorch基于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())

```

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 9月7日
    • 创建了问题 8月30日

    悬赏问题

    • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
    • ¥50 如何将脑的图像投影到颅骨上
    • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
    • ¥15 netcore使用PuppeteerSharp截图
    • ¥20 这张图页脚具体代码该怎么写?
    • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
    • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂
    • ¥15 数字信号处理考试111
    • ¥15 allegro17.2生成bom表是空白的
    • ¥15 请问一下怎么打通CAN通讯