import torch
import torch.nn as nn

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv1d(1, 5, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv2 = nn.Sequential(
            nn.Conv1d(5, 10, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv3 = nn.Sequential(
            nn.Conv1d(10, 15, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv4 = nn.Sequential(
            nn.Conv1d(15, 20, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv5 = nn.Sequential(
            nn.Conv1d(20, 25, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv6 = nn.Sequential(
            nn.Conv1d(25, 30, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv7 = nn.Sequential(
            nn.Conv1d(30, 35, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.conv8 = nn.Sequential(
            nn.Conv1d(35, 40, kernel_size=3, stride=1, padding=1),
            nn.Mish()
        )
        self.avgpool = nn.AvgPool1d(kernel_size=2, stride=1)
        self.global_avgpool = nn.AdaptiveAvgPool1d(1)
        self.fc = nn.Linear(40, 6)
        self.softmax = nn.Softmax(dim=1)
        self.loss_fn = nn.CrossEntropyLoss()

    def forward(self, x):
        x = torch.squeeze(x, dim=1)
        x = self.conv1(x)
        x = self.avgpool(x)
        x = self.conv2(x)
        x = self.avgpool(x)
        x = self.conv3(x)
        x = self.avgpool(x)
        x = self.conv4(x)
        x = self.avgpool(x)
        x = self.conv5(x)
        x = self.avgpool(x)
        x = self.conv6(x)
        x = self.avgpool(x)
        x = self.conv7(x)
        x = self.avgpool(x)
        x = self.conv8(x)
        x = self.global_avgpool(x)
        x = x.view(x.size(0), -1)
        feature = x
        x = self.fc(x)
        output = self.softmax(x)
        return feature, output

这段代码定义了一个名为 'CNN' 的一维卷积神经网络模型。

模型结构:

  • 该模型包含八层卷积层 (conv1conv8),每层后面都跟着一个 Mish 激活函数和一个平均池化层 (avgpool)。
  • global_avgpool 层用于将特征图的维度降为 1。
  • fc 层是一个全连接层,用于将特征映射到最终的输出类别。
  • softmax 层将输出转换为概率分布。
  • loss_fn 定义了交叉熵损失函数,用于训练模型。

前向传递过程:

  1. 输入数据 x 首先被压缩以移除大小为 1 的维度。
  2. 数据依次通过八层卷积层、激活函数和池化层进行特征提取。
  3. 全局平均池化层将特征图转换为单个向量。
  4. 全连接层将特征向量映射到输出类别。
  5. Softmax 函数将输出转换为概率分布。

其他信息:

  • 该代码使用 PyTorch 框架实现。
  • Mish 激活函数是一种新型的激活函数,可以提高模型的性能。
  • 平均池化层用于降低特征图的维度,同时保留重要的特征信息。

希望这个解释对您有所帮助!


原文地址: https://www.cveoy.top/t/topic/c32U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录