【问题标题】:How to input a matrix to CNN in pytorch如何在pytorch中向CNN输入矩阵
【发布时间】:2017-10-24 04:01:27
【问题描述】:

我对 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 raise ValueError("预期 4D 张量作为输入,得到 {}D 张量。".format(input.dim())) 预期 4D 张量作为输入,改为 3D 张量。

【问题讨论】:

    标签: pytorch


    【解决方案1】:

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

    (batch_size, 通道, 宽度, 高度)

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

    例如(1、1、28、28)

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

    【讨论】: