PyTorch ToTensor 缩放到 [0,1] 差异
PyTorch ToTensor scaling to [0,1] discrepancy
如果我这样做
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
?
有人能帮我理解一下吗?
当你做的时候
mnist_train.data
PyTorch 为您提供 mnist_train
的 data
属性,该属性在 this line 上定义(当您创建 MNIST 实例时)。如果您在 __init__
中查看它之前的代码,则不会发生转换!
OTOH,当你这样做时
mnist_train[i]
对象的__getitem__
方法被触发,你可以找到here。此方法中有 transform
的 if
语句,因此您现在得到转换后的版本。
由于常见的用法是通过 torch.utils.data.DataLoader
使用这个 MNIST 数据集(或任何其他数据集),它称之为 __getitem__
,我们得到了标准化值。
如果我这样做
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
?
有人能帮我理解一下吗?
当你做的时候
mnist_train.data
PyTorch 为您提供 mnist_train
的 data
属性,该属性在 this line 上定义(当您创建 MNIST 实例时)。如果您在 __init__
中查看它之前的代码,则不会发生转换!
OTOH,当你这样做时
mnist_train[i]
对象的__getitem__
方法被触发,你可以找到here。此方法中有 transform
的 if
语句,因此您现在得到转换后的版本。
由于常见的用法是通过 torch.utils.data.DataLoader
使用这个 MNIST 数据集(或任何其他数据集),它称之为 __getitem__
,我们得到了标准化值。