为什么 MNIST 显示为 4 层深的列表?

Why is MNIST showing as a list 4 levels deep?

在 MNIST 上使用 PyTorch 试验一些简单的代码,我对它如何表示数据的一个方面感到困惑;也许我只是忽略了一些非常明显的东西。

给出

train_loader = torch.utils.data.DataLoader(
    torchvision.datasets.MNIST(
        "data",
        train=True,
        download=True,
        transform=torchvision.transforms.Compose(
            [
                torchvision.transforms.ToTensor(),
                torchvision.transforms.Normalize((0.1307,), (0.3081,)),
            ]
        ),
    ),
    batch_size=batch_size_train,
    shuffle=True,
)

for batch_idx, (data, target) in enumerate(train_loader):
    print(data)

我明白了

tensor([[[[-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          ...,
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242]]],


        [[[-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          ...,
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242],
          [-0.4242, -0.4242, -0.4242,  ..., -0.4242, -0.4242, -0.4242]]],
          

我期待一个对应于三层深度列表的张量:一个图像列表,每一个都是一个行列表,每一个都是一个数字列表。或者换句话说,最里面的 [] 是一行,接下来的 [] 是图像,最外面的 [] 是图像列表。

但是它有四层深。

为什么要加关?

4 个级别是

  1. 批量
  2. 频道
  3. 栏目