我对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张量。
答案 0 :(得分:3)
您的输入可能缺少一个维度。它应该是:
(batch_size,channels,width,height)
如果批次中只有一个元素,则张量必须在您的情况下
例如(1,1,28,28)
因为您的第一个conv2d层需要1声道输入。