【问题标题】:What does the 1 in torch.Size([64, 1, 28, 28]) mean when I check a tensor shape?当我检查张量形状时,torch.Size([64, 1, 28, 28]) 中的 1 是什么意思?
【发布时间】:2021-06-27 08:34:56
【问题描述】:

我关注 this tutorial on towardsdatascience.com 是因为我想使用 Pytorch 尝试 MNIST 数据集,因为我已经使用 keras 完成了它。

所以在第 2 步中,他们更好地了解数据集,打印 trainloader 的形状并返回 torch.Size([64, 1, 28, 28])。我知道 64 是该加载程序中的图像数量,并且每个图像都是 28x28 图像,但是 1 到底是什么意思?

【问题讨论】:

    标签: python pytorch mnist


    【解决方案1】:

    这是输入中的通道数。在 MNIST 数据集中,图像是灰度的,因此图像的形状是[28, 28, 1]。请注意,pytorch 将第一个维度设置为通道维度。

    当然,一旦作为批次加载,总输入形状就是你得到的那个。

    请参阅MNIST dataset 链接,其中指出:

    来自 NIST 的原始黑白(双层)图像大小为 标准化以适合 20x20 像素框,同时保留其外观 比率。生成的图像包含灰度级,因为 归一化算法使用的抗锯齿技术。这 通过计算质心,图像以 28x28 图像为中心 的像素,并平移图像以定位该点 位于 28x28 字段的中心。

    【讨论】:

    • 抱歉,我不太明白您的意思,因为我尝试使用 plt.imshow(images[0].numpy().squeeze()) 显示图像,结果显示的是彩色图片
    • matplotlib.pyplot.imshow() 将图像推断为热图,这就是您获得颜色的原因。当您执行images[0].numpy().squeeze() 时,您“删除”了通道维度,因此您得到一个二维矩阵,其值是一种热图
    • @tildawn 你也可以参考stackoverflow.com/questions/41265576/…
    【解决方案2】:

    这将表明数据集中存在的批次数。将其视为组,因此我们有 1 批 64 张图像,或者您可以更改它,例如,有 2 批,每批 32 张图像。批量大小通常会影响模型的计算复杂度。 当然,根据使用的库(尤其是在训练/测试循环中),如果您只使用 1 个批次或 X 个批次,代码看起来会略有不同。

    例如(epochs/iterations = 50):假设您正在训练批大小 = 1 的数据集,在训练循环中您只需编写训练模型 epoch 时间。但是,对于批量大小 = x,您必须为每个时期以及每个批次/组循环。

    【讨论】:

      【解决方案3】:

      总之,
      它只是您的28x28 图片的频道数

      【讨论】:

      • 让它更简单.. torch.Size([ 64, #Batch Size 1, #Color Channel,由于 MNIST 数据集中的图像是灰度的,因此只有一个通道表示为 1。 28, #Rows 28 #Columns ]) 希望这会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 2020-02-11
      • 1970-01-01
      • 2019-11-13
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多