【问题标题】:torch.utils.data.DataLoader - why it adds a dimensiontorch.utils.data.DataLoader - 为什么添加维度
【发布时间】:2021-11-05 17:55:04
【问题描述】:
from torchvision import datasets, transforms
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,), (0.5,)),])
trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=64, shuffle=True)            # A
trainloader = torch.utils.data.DataLoader(trainset.train_data, batch_size=64, shuffle=True) # B

dataiter = iter(trainloader)     
images, labels = dataiter.next() # A
images         = dataiter.next() # B
images.shape

为什么上面的代码,方法#A给出了torch.Size([64, 1, 28, 28]),而#B给出了torch.Size([64, 28, 28])? #A 中值为 1 的第二个维度从何而来?

提前谢谢你。

【问题讨论】:

    标签: mnist pytorch-dataloader


    【解决方案1】:

    第二个维度描述了灰度为 1 的颜色通道。RGB 图像将有 3 个通道(红色、绿色和蓝色),看起来类似于 64, 3, W, H。 因此,在使用 CNN 时,您的数据通常必须是 batchsize, channels, width, height 的形状,因此 64, 1, 28, 28 是正确的。

    【讨论】:

    • 谢谢。您能解释一下频道信息是在哪里保存或生成的吗?我尝试了 dir(trainset),但没有看到任何相关内容。
    • hm 你所说的 sotred/generated 到底是什么意思? MNIST 图像的所有像素都由 0-1 范围内的值描述。所以每个像素都是一个值。如果你有一个 RGB 图像,每个像素将有三个不同的 0-1 值,因此三个通道
    • 对不起,让我说清楚。 'trainset.train_data.shape' 给出了 torch.Size([60000, 28, 28])。通道没有额外的维度。所以我想知道 torch.utils.data.DataLoader 是否自动创建了通道维度。
    • 它可能会
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多