我有一个500x2000的矩阵,其中每一行代表一个个体,每一列代表对该个体的某些特定质量的度量。我使用的批处理大小为64,因此网络每个周期的输入实际上是64x2000矩阵。我正在尝试在PyTorch中构建CNN,以便根据一组这些度量对个人进行分类。但是,我偶然发现了卷积层的参数。

以下是我对简单卷积神经网络的当前定义。

class CNNnet(nn.Module)
    def __init__(self):
        self.conv1 = nn.Conv1d(2000, 200, (1,2), stride=10)
        self.pool = nn.MaxPool1d(kernel_size = (1, 2), stride = 2)

        self.fc1 = nn.Linear(64, 30)
        self.fc2 = nn.Linear(30, 7)

    def forward(self, x):
        x = x.view(64, 2000, 1)
        x = F.relu(self.conv1(x))
        x = self.pool(x)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x


尝试训练此模型会产生以下错误:


  “ RuntimeError:4维权重的预期4维输入
  200 2000 1 2,但获得了大小为[64,2000,1]的3维输入
  代替”。


我对为什么期望使用4D 200x2000x1x2矩阵感到困惑(输出通道的数量与输入无关吗?为什么末尾有2?)。

我的问题是,当处理一维数据时,编写CNN(特别是卷积层)的正确语法或方法是什么?任何帮助是极大的赞赏。

最佳答案

因此,在一维情况下的内核大小仅仅是一个向量。因此,如果您要使用大小为“ 1X2”的内核,则需要指定“ 2”
在二维情况下2表示内核大小为“ 2X2”。

您给了一个2个值的元组,因此您使用了2种内核类型,每种类型都会创建自己的通道

关于python - 如何在PyTorch中为数字数据正确实现一维CNN?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59125208/

10-08 20:34