如何在pytorch中输入矩阵到CNN
How to input a matrix to CNN in 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时,报错带来:
File "/home/sparks/anaconda2/lib/python2.7/site-packages/torch/nn/functional.py", line 48, in conv2d
raise ValueError("Expected 4D tensor as input, got {}D tensor instead.".format(input.dim()))
Expected 4D tensor as input, got 3D tensor instead.
您的输入可能缺少一维。应该是:
(batch_size, channels, width, height)
如果批处理中只有一个元素,则张量必须适合您的情况
e.g (1, 1, 28, 28)
因为您的第一个 conv2d 层需要单通道输入。
我是 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时,报错带来:
File "/home/sparks/anaconda2/lib/python2.7/site-packages/torch/nn/functional.py", line 48, in conv2d raise ValueError("Expected 4D tensor as input, got {}D tensor instead.".format(input.dim())) Expected 4D tensor as input, got 3D tensor instead.
您的输入可能缺少一维。应该是:
(batch_size, channels, width, height)
如果批处理中只有一个元素,则张量必须适合您的情况
e.g (1, 1, 28, 28)
因为您的第一个 conv2d 层需要单通道输入。