如何在PyTorch中为数字数据正确实现一维CNN?

时间:2019-12-01 11:48:32

标签: python machine-learning neural-network conv-neural-network pytorch

我有一个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?)。 / p>

我的问题是,在处理一维数据时,编写CNN(特别是卷积层)的正确语法或方法是什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

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