为什么 MNIST 图像是 1x28x28 张量?
Why are the MNIST images 1x28x28 tensors?
我用
将 28x28 像素图像的 MNIST 图像制作成张量
dataset = MNIST(root='data/', train=True, transform=transforms.ToTensor())
当我运行
img_tensor, label = dataset[0]
print(img_tensor.shape, label)
表示形状是torch.Size([1, 28, 28])
。
为什么是 1x28x28?第一维是什么意思? 1x28x28 相对于 28x28 有什么意义?
被视为矩阵的图像始终具有 3 个维度:通道、宽度和高度。 28
和 28
当然是宽度和高度。本例中的 1
是频道。那么渠道是什么?每个像素由三种颜色表示:红色、蓝色和绿色。对于每种颜色,您将有一个颜色通道,因此通常为 3 (RGB)。这使得图片维度(3,W,H)。那为什么你有一个 1 呢?因为 MNIST 图像是黑白的,因此不需要三个不同的颜色通道来表示最终颜色,一个通道就足够了,因此对于黑白图像,你的维度是 (1, W, H)。
这是下面的图片以可视化尺寸:
来源:https://commons.wikimedia.org/wiki/File:RGB_channels_separation.png
所以你看,对于黑白图像你只需要一个通道。
通常你可以忽略 1 维,但是 pytorch 需要通道维度。
顺序是(B, C, W, H) -> (batch, channel, width and height) 是pytorch卷积操作的顺序。
我用
将 28x28 像素图像的 MNIST 图像制作成张量dataset = MNIST(root='data/', train=True, transform=transforms.ToTensor())
当我运行
img_tensor, label = dataset[0]
print(img_tensor.shape, label)
表示形状是torch.Size([1, 28, 28])
。
为什么是 1x28x28?第一维是什么意思? 1x28x28 相对于 28x28 有什么意义?
被视为矩阵的图像始终具有 3 个维度:通道、宽度和高度。 28
和 28
当然是宽度和高度。本例中的 1
是频道。那么渠道是什么?每个像素由三种颜色表示:红色、蓝色和绿色。对于每种颜色,您将有一个颜色通道,因此通常为 3 (RGB)。这使得图片维度(3,W,H)。那为什么你有一个 1 呢?因为 MNIST 图像是黑白的,因此不需要三个不同的颜色通道来表示最终颜色,一个通道就足够了,因此对于黑白图像,你的维度是 (1, W, H)。
这是下面的图片以可视化尺寸:
来源:https://commons.wikimedia.org/wiki/File:RGB_channels_separation.png
所以你看,对于黑白图像你只需要一个通道。 通常你可以忽略 1 维,但是 pytorch 需要通道维度。
顺序是(B, C, W, H) -> (batch, channel, width and height) 是pytorch卷积操作的顺序。