Python 如何在Pytork中正确实现数值数据的1D CNN?

Python 如何在Pytork中正确实现数值数据的1D CNN?,python,machine-learning,neural-network,conv-neural-network,pytorch,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,

我有一个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:四维权重的预期四维输入 200200012,但得到大小为[6420001]的三维输入 相反”

我不明白为什么它期望一个4D 200x2000x1x2矩阵(输出通道的数量不应该与输入无关吗?为什么末尾有一个2?)


我的问题是,在处理一维数据时,编写CNN(特别是卷积层)的正确语法或方法是什么。非常感谢您的帮助。

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


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

2
来自内核,为什么您将其定义为
(1,2)
?由于每个单独的数据是一维的(即2000个特性的列表),我认为内核也应该是一维的(在本例中为1x2)而不是正方形矩阵。这不正确吗?谢谢,我不知道Conv1d的区别。将kernel_size参数更改为2后,错误更改为“RuntimeError:每个通道计算的填充输入大小:(1)。内核大小:(2)。内核大小不能大于实际输入大小”。你知道这是什么原因吗?你需要确保你在图层中定义了正确的尺寸