#pytorch #mnist
#pytorch #mnist
Вопрос:
Экспериментирую с некоторым простым кодом, используя PyTorch в MNIST, и я озадачен аспектом того, как он представляет данные; возможно, я просто упускаю из виду что-то действительно очевидное.
Учитывая
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]]],
Я ожидал, что тензор, соответствующий списку глубиной в три уровня: список изображений, каждый из которых представляет собой список строк, каждый из которых представляет собой список чисел. Или, другими словами, самый внутренний []
— это строка, следующий []
— изображение, самый внешний []
— список изображений.
Но вместо этого он имеет глубину четыре уровня.
Зачем дополнительный уровень?
Ответ №1:
4 уровня
- Пакет
- Канал
- Строка
- Столбец
Комментарии:
1. Ах! Я привык к идее, что канал будет, например, красным / зеленым / синим для каждого пикселя, поэтому, если он присутствует, он будет самым внутренним. Интересно, почему они размещают его снаружи, прямо под batch.
2. Pytorch использует этот формат [пакет, канал, строка, столбец]
3. Может быть, это так, что канал всегда будет находиться в одном и том же месте, независимо от того, сколько или несколько измерений находятся под ним? Хорошо, это проясняет ситуацию. Спасибо!