如何解决PyTorch ToTensor 缩放到 [0,1] 差异
如果我这样做
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 为您提供 data
的 mnist_train
属性,该属性在 this line 上定义(当您创建 MNIST 实例时)。如果您查看 __init__
中它之前的代码,则不会发生任何转换!
OTOH,当你这样做时
mnist_train[i]
对象的__getitem__
方法被触发,你可以找到here。在此方法中有 if
的 transform
语句,因此您现在可以获得转换后的版本。
由于一个常见的用法是通过 torch.utils.data.DataLoader
使用这个 MNIST 数据集(或任何其他数据集)并且它调用这个 __getitem__
,所以我们得到了归一化值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。