qq_43178462 2023-03-28 14:55 采纳率: 30%
浏览 50
已结题

pytorch自制数据集用于分类实验问题

本人自制数据集用于分类实验,使用的是pytorch,生成的数据如下:

X_train_tensor.shape = torch.Size([12601, 32, 32])
Y_train_tensor.shape = torch.Size([12601])

使用网上的方法将数据转为Dataset和DataLoader:

train_dataset = TensorDataset(X_train,Y_train)
test_dataset = TensorDataset(x_test,y_test)

train_loader = torch.utils.data.DataLoader(dataset = train_dataset, shuffle = True)
test_loader = torch.utils.data.DataLoader(dataset = test_dataset, shuffle = True)

在实际分类实验中,一直遇到类似错误:

RuntimeError: Given groups=1, weight of size [64, 3, 3, 3], expected input[1, 100, 32, 32] to have 3 channels, but got 100 channels instead

请问这种自制数据集应该怎样修改才适合于pytorch搭建的2D神经网络分类实验。

  • 写回答

3条回答 默认 最新

  • 关注

    这个错误是由于Conv2d卷积层的输入通道数和输入数据的通道数不匹配造成的。Conv2d卷积层的输入数据的形状应该是(batch_size, channels, height, width),其中channels指输入数据的通道数。在这个错误中,Conv2d卷积层的输入数据应该有64个通道,但实际输入的数据却有100个通道,因此引发了错误。
    解决这个问题的方法是,检查输入数据的通道数是否正确,确保与Conv2d卷积层的输入通道数匹配。如果输入数据的通道数不正确,可以使用torch.nn.functional.interpolate函数进行插值,将输入数据的通道数调整为正确的值。
    举个例子,假设输入数据的形状为(batch_size, 100, height, width),Conv2d卷积层的输入通道数为64,可以使用如下代码进行插值

    
    import torch.nn.functional as F
    x = F.interpolate(x, size=(height, width), mode='bilinear', align_corners=True)
    x = x[:, :64, :, :]
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月28日
  • 创建了问题 3月28日