PyTorch CNN 模型输入形状修改 - 适配 [100, 10000, 12] 数据

本文将展示如何修改一个 PyTorch CNN 模型,使其能够接受输入形状为 [100, 10000, 12] 的数据。

原始模型:

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.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):
        # ... 前向传播过程
        return feature, output

问题: 原始模型的输入形状为 [100, 1, 10000, 12],需要修改为 [100, 10000, 12],即去除第二个维度 1。

解决方案: 修改第一层卷积层的输入通道数,使其与新的输入形状匹配。

修改后的模型:

import torch.nn as nn

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Sequential(
            nn.Conv1d(10000, 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.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):
        # ... 前向传播过程
        return feature, output

解释:

  • 原始模型的 conv1 层接受 1 个通道的输入,而新模型的 conv1 层接受 10000 个通道的输入,以匹配新的输入形状。
  • 其他层保持不变。

注意: 在实际应用中,可能还需要根据具体情况对模型的其他部分进行调整,例如调整池化层的参数等。

经过修改后的模型就可以接受形状为 [100, 10000, 12] 的输入数据。

PyTorch CNN 模型输入形状修改 - 适配 [100, 10000, 12] 数据

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

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