【问题标题】:PyTorch ToTensor scaling to [0,1] discrepancyPyTorch ToTensor 缩放到 [0,1] 差异
【发布时间】:2021-06-23 12:53:03
【问题描述】:

如果我这样做

mnist_train = MNIST('../data/MNIST', download = True,
                transform = transforms.Compose([
                    transforms.ToTensor(),
                ]), train = True)

mnist_train.data.max()

为什么我会得到 255?我应该得到 1,因为 ToTensor() 可以缩放到 [0,1],对吧?

如果我这样做:

for i in range(0, len(mnist_train)):
    print(mnist_train[i][0].max())

那么,我几乎得到了1

有人可以帮我理解一下吗?

【问题讨论】:

  • Documentation 说“......在其他情况下,张量返回而不缩放。”;所以你的案子属于其他案子之一?
  • 我还打印了最大值,这是问题的第二部分,我得到了几乎所有1
  • 你是对的!我写了一个关于为什么的答案。

标签: python machine-learning pytorch mnist


【解决方案1】:

当你这样做时

mnist_train.data

PyTorch 为您提供 mnist_traindata 属性,该属性在 this line 上定义(当您创建 MNIST 实例时)。如果您查看__init__ 之前的代码,则不会发生任何转换!

OTOH,当你这样做时

mnist_train[i]

对象的__getitem__方法被触发,你可以找到here。在此方法中有一个if 语句用于transform,因此您现在可以得到转换后的版本。

由于一个常见的用法是通过 torch.utils.data.DataLoader 使用这个 MNIST 数据集(或任何其他数据集)并且它调用这个 __getitem__,我们得到了标准化值。

【讨论】:

    猜你喜欢
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 2019-01-07
    相关资源
    最近更新 更多