tensorflow 如何解释这个MNISTTensor?

xfb7svmp  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(173)

我找到了一个代码,可以将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]?
抱歉,如果这看起来像是一个帖子里的两个问题,但我相信它们是密切相关的。

rsaldnfx

rsaldnfx1#

如你所说,MNIST是一个1000, 1, 28, 28Tensor,所以每幅图像都是一个28x28矩阵,显然它包含28个长度为28的向量(第一个问题)
对于您的第二个问题,虽然MNIST只有一个通道,但通常情况下,图像在手电筒中可以有三个甚至更多的通道。因此,您必须放置[0],因为它是MNIST的虚拟维度,并使Tensor成为所有图像类型的通用形式。

相关问题