我正在CIFAR10数据集上训练CNN。我提取了50,000张尺寸为(32 x 32 x 3)的图像,并在列表中读取它们。我将它们转换为numpy数组,并将其存储在列表中。我在训练和测试标签上也做了同样的事情。
然后,我在pytorch中构建了两层CNN和一个FC。在执行此操作之前,我创建了自己的自定义数据加载器。这样做时,我要输入的图像的尺寸正在改变。尺寸(32 x 32 x 3)更改为(3 x 32 x 32),我无法训练我的神经网络。
tensor_x = torch.stack([torch.Tensor(i) for i in train_images])
tensor_y = torch.stack([torch.Tensor(i) for i in train_labels])
dataset = data_utils.TensorDataset(tensor_x , tensor_y)
train_dataloader = data_utils.DataLoader(dataset=dataset)
tensor_x = torch.stack([torch.Tensor(i) for i in test_images])
tensor_y = torch.stack([torch.Tensor(i) for i in test_labels])
dataset = data_utils.TensorDataset(tensor_x , tensor_y)
test_dataloader = data_utils.DataLoader(dataset=dataset)
RuntimeError: Given groups=1, weight[64, 3, 3, 3], so expected input[1, 32, 32, 3] to have 3 channels, but got 32 channels instead
答案 0 :(得分:1)
在PyTorch图像中,通道优先,因此您的图像应为3, 32, 32
而不是32, 32, 3
。
如果image
是一个numpy数组,则可以执行以下操作
image = image.transpose((2, 0, 1))