import\u0020torch\nimport\u0020torch.nn\u0020as\u0020nn\nimport\u0020torch.nn.functional\u0020as\u0020F\nfrom\u0020gmlp\u0020import\u0020SpatialGatingUnit,\u0020gMLPBlock,\u0020gMLP\n\n\nclass\u0020CNN(nn.Module):\n\u0020\u0020def\u0020__init__(self):\u0020\u0020\u0020#\u0020初始化方法\n\u0020\u0020\u0020super(CNN,\u0020self).init()\u0020\u0020\u0020#\u0020初始化方法\n\u0020\u0020\u0020self.conv1\u0020=\u0020nn.Sequential(\u0020\u0020\u0020#\u0020input\u0020shape\u0020(1,10000,12)\n\u0020\u0020\u0020\u0020nn.Conv2d(\u0020\u0020\u0020#\u0020二维卷积层\n\u0020\u0020\u0020\u0020\u0020in_channels=1,\u0020\u0020\u0020#\u0020input\u0020height\u0020\u0020#\u0020输入通道数\n\u0020\u0020\u0020\u0020\u0020out_channels=5,\u0020\u0020\u0020#\u0020n_filters\u0020\u0020\u0020#\u0020输出通道数(卷积核数量)\n\u0020\u0020\u0020\u0020\u0020kernel_size=(200,\u00203),\u0020\u0020#\u0020filter\u0020size\u0020\u0020#\u0020卷积核大小\n\u0020\u0020\u0020\u0020\u0020stride=(50,\u00201),\u0020\u0020#\u0020filter\u0020movement/step\u0020\u0020#\u0020卷积核移动步长\n\u0020\u0020\u0020\u0020\u0020padding=1,\u0020\u0020#\u0020填充大小\n\u0020\u0020\u0020\u0020),\n\u0020\u0020\u0020\u0020nn.ReLU(),\n\u0020\u0020\u0020\u0020nn.MaxPool2d(kernel_size=2,\u0020padding=1),\n\u0020\u0020\u0020)\n\u0020\u0020\u0020\n\u0020\u0020\u0020self.conv2\u0020=\u0020nn.Sequential(\u0020\u0020\u0020#\u0020input\u0020shape\u0020(5,99,7)\n\u0020\u0020\u0020\u0020nn.Conv2d(5,\u002010,\u0020(20,\u00202),\u0020(4,\u00201),\u00201),\u0020#\u0020output\u0020shape\u0020\u0020#\u0020输出通道数为10,卷积核大小为(20,2),步长为(4,1),填充为1\n\u0020\u0020\u0020\u0020nn.ReLU(),\u0020\u0020#\u0020activation\n\u0020\u0020\u0020\u0020nn.MaxPool2d(kernel_size=2),\u0020\u0020#\u0020最大池化层\u0020\u0020#\u0020output\u0020shape\u0020(10,10,4)\n\u0020\u0020\u0020)\n\n\u0020\u0020\u0020self.gmlp\u0020=\u0020gMLP(d_model=10,\u0020d_ffn=20,\u0020seq_len=10,\u0020num_layers=6)\n\u0020\u0020\u0020self.flatten\u0020=\u0020nn.Flatten()\n\u0020\u0020\u0020self.linear\u0020=\u0020nn.Linear(in_features=64,\u0020out_features=64)\n\u0020\u0020\u0020self.relu\u0020=\u0020nn.ReLU(inplace=True)\n\u0020\u0020\u0020self.dropout\u0020=\u0020nn.Dropout(p=0.4)\n\u0020\u0020\u0020self.out\u0020=\u0020nn.Linear(64,\u00206)\n\n\u0020\u0020def\u0020forward(self,\u0020x):\u0020\u0020#\u0020前向传播方法\n\u0020\u0020\u0020x\u0020=\u0020self.conv1(x)\u0020\u0020#\u0020通过第一个卷积层序列\n\u0020\u0020\u0020x\u0020=\u0020self.conv2(x)\u0020\u0020#\u0020通过第二个卷积层序列\n\u0020\u0020\u0020N,\u0020C,\u0020H,\u0020W\u0020=\u0020x.shape\n\u0020\u0020\u0020x\u0020=\u0020x.view(N,\u0020C,\u0020H\u0020*\u0020W).permute(0,\u00202,\u00201)\n\u0020\u0020\u0020x\u0020=\u0020self.gmlp(x)\n\u0020\u0020\u0020x\u0020=\u0020self.flatten(x)\u0020\u0020#\u0020换顺序了\u0020先展平\u0020在输入线性层中\n\u0020\u0020\u0020x\u0020=\u0020self.linear(x)\n\u0020\u0020\u0020feature\u0020=\u0020x\u0020\u0020#\u0020提取特征\n\u0020\u0020\u0020x\u0020=\u0020self.relu(x)\n\u0020\u0020\u0020x\u0020=\u0020self.dropout(x)\n\u0020\u0020\u0020output\u0020=\u0020self.out(x)\u0020\u0020#\u0020通过全连接层得到输出\n\u0020\u0020\u0020return\u0020feature,\u0020output\u0020\u0020#\u0020返回特征和输出


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

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