我找到了一个代码,可以将MNIST数据集的数据转换为Tensor。代码如下:
import torch
import torchvision
import matplotlib.pyplot as plt
batch_size_test=1000
test_loader=torch.utils.data.DataLoader(
torchvision.datasets.MNIST('/files/',train=False,download=True,
transform=torchvision.transforms.Compose(
[torchvision.transforms.ToTensor(),
torchvision.transforms.Normalize(
(0.1307,),(0.3081,))
])),
batch_size=batch_size_test,shuffle=True
)
examples=enumerate(test_loader)
print (example_data.shape)
当我打印example_data的形状时,我得到了以下内容:
torch.Size([1000, 1, 28, 28])
所以,对于我所知道的是1000个样本的Tensor,1个通道和28像素高和28像素宽的图像,在图形上,我想象像一种4d阵列,其中我有立方体,1000个一个堆叠在另一个之上,然后每个立方体由28 x 28 x 1数据形成。
我还尝试了以下指令:
print (example_data[2][0])
但输出是这样的:
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],
我看到括号中的每一部分,就像一个一维数组,在水平方向上包含了28个数字,但是为什么在垂直方向上也有28个数字呢?
此外,在本部分中:print (example_data[2][0])
,2表示第二个样本,但为什么我必须放置[0]?
抱歉,如果这看起来像是一个帖子里的两个问题,但我相信它们是密切相关的。
1条答案
按热度按时间rsaldnfx1#
如你所说,MNIST是一个
1000, 1, 28, 28
Tensor,所以每幅图像都是一个28x28
矩阵,显然它包含28个长度为28的向量(第一个问题)对于您的第二个问题,虽然MNIST只有一个通道,但通常情况下,图像在手电筒中可以有三个甚至更多的通道。因此,您必须放置[0],因为它是MNIST的虚拟维度,并使Tensor成为所有图像类型的通用形式。