未能使用 transforms.ToTensor 和 transforms.Normalize 规范化 MNIST 数据集
Failed to use transforms.ToTensor and transforms.Normalize to normalize the MNIST dataset
我使用以下代码对 MNIST 数据集进行规范化,当我打印第一个样本时,它无法规范化,因为最大元素是 255
,而不是 1
。
train_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))])
train_set = torchvision.datasets.MNIST(
root=data_dir, train=True, download=True, transform=train_transform)
当我检查数据集输入图像的范围时:
print("min:%f max:%f" %(train_set.data.min(), train_set.data.max()))
output result:min:0.000000 max:255.000000
我原本期待 [0, 1]
,但我不知道为什么会这样。有什么问题吗?
你的范围为 [0,255]
的原因是你正在通过 data
属性访问数据集的基础数据。这意味着转换尚未应用于数据。
>>> train_transform = T.Compose([T.ToTensor()])
>>> train_set = torchvision.datasets.MNIST(
root='.', train=True, download=True, transform=train_transform)
您访问的数据:
>>> f'min:{train_set.data.min()} max:{train_set.data.max()}'
min:0.000000 max:255.000000
您必须通过适当的接口访问数据集才能使转换管道生效。为确保您可以将整个数据集的输入展开为张量并查看其范围:
>>> x, y = zip(*train_set)
>>> x_ = torch.stack(x)
>>> f'min:{x_.min()} max:{x_.max()}'
min:tensor(0.) max:tensor(1.)
我使用以下代码对 MNIST 数据集进行规范化,当我打印第一个样本时,它无法规范化,因为最大元素是 255
,而不是 1
。
train_transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.1307,), (0.3081,))])
train_set = torchvision.datasets.MNIST(
root=data_dir, train=True, download=True, transform=train_transform)
当我检查数据集输入图像的范围时:
print("min:%f max:%f" %(train_set.data.min(), train_set.data.max()))
output result:min:0.000000 max:255.000000
我原本期待 [0, 1]
,但我不知道为什么会这样。有什么问题吗?
你的范围为 [0,255]
的原因是你正在通过 data
属性访问数据集的基础数据。这意味着转换尚未应用于数据。
>>> train_transform = T.Compose([T.ToTensor()])
>>> train_set = torchvision.datasets.MNIST(
root='.', train=True, download=True, transform=train_transform)
您访问的数据:
>>> f'min:{train_set.data.min()} max:{train_set.data.max()}'
min:0.000000 max:255.000000
您必须通过适当的接口访问数据集才能使转换管道生效。为确保您可以将整个数据集的输入展开为张量并查看其范围:
>>> x, y = zip(*train_set)
>>> x_ = torch.stack(x)
>>> f'min:{x_.min()} max:{x_.max()}'
min:tensor(0.) max:tensor(1.)