如何在pytorch中向CNN输入矩阵

时间:2017-10-24 04:01:27

标签: pytorch

我对pytorch很新,我想弄清楚如何在CNN中输入矩阵而不是图像。 我以下面的方式尝试它,但发生了一些错误。 我将我的数据集定义如下:

class FrameDataSet(tud.Dataset):
    def __init__(self, data):
        targets = data['class'].values.tolist()
        features = data.drop('class', axis=1).astype(np.int64).values

        self.datalist = features.reshape((-1, feature_num, frame_size))
        self.labellist = targets

    def __getitem__(self, index):
        return torch.Tensor(self.datalist[index].astype(float)), self.labellist[index]

    def __len__(self):
        return self.datalist.shape[0]

我的CNN是:

self.conv = nn.Sequential(
        nn.Conv2d(1, 12, 3),
        nn.ReLU(True),
        nn.MaxPool2d(3, 3))
self.fc1 = nn.Linear(80, 100)
self.fc2 = nn.Linear(100, 30)
self.fc3 = nn.Linear(30, 5)

但是当数据输入CNN时,错误带来:

  

文件“/home/sparks/anaconda2/lib/python2.7/site-packages/torch/nn/functional.py”,第48行,在conv2d中       提高ValueError(“预期4D张量为输入,得到{} D张量。”。format(input.dim()))   期望4D张量作为输入,取而代之的是3D张量。

1 个答案:

答案 0 :(得分:3)

您的输入可能缺少一个维度。它应该是:

  

(batch_size,channels,width,height)

如果批次中只有一个元素,则张量必须在您的情况下

  

例如(1,1,28,28)

因为您的第一个conv2d层需要1声道输入。