PyTorch - 35 - PyTorch数据集标准化 - Torchvision.Transforms.Normalize()
Data Normalization
数据规范化的概念是一个通用概念,指的是将数据集的原始值转换为新值的行为。 新值通常相对于数据集本身进行编码,并以某种方式缩放。
Feature Scaling
因此,有时使用的数据标准化的另一个名称是特征缩放。该术语指的是以下事实:在对数据进行规范化时,我们经常将给定数据集的不同特征转换为相似的比例。
在这种情况下,我们不仅在考虑值的数据集,还在考虑具有多个特征(每个都有其on值)的元素的数据集。
例如,假设我们正在处理一个人的数据集,并且我们的数据集中有两个相关特征,即年龄和体重。在这种情况下,我们可以观察到这两个特征集的大小或比例是不同的,即平均权重大于年龄。
在比较或使用机器学习算法进行计算时,大小上的差异可能会成为问题。因此,这可能是我们可能希望通过特征缩放将这些特征的值缩放到某个类似比例的原因之一。
Normalize A Dataset In Code
让我们跳入一个代码示例。第一步是初始化我们的数据集,因此在本示例中,我们将使用到目前为止在该系列中一直使用的Fashion MNIST数据集。
train_set = torchvision.datasets.FashionMNIST(
root='./data'
,train=True
,download=True
,transform=transforms.Compose([
transforms.ToTensor()
])
)
通过将每个颜色通道的均值和标准差值传递给Normalize()变换,PyTorch允许我们使用刚刚看到的标准化过程来标准化数据集。
torchvision.transforms.Normalize(
[meanOfChannel1, meanOfChannel2, meanOfChannel3]
, [stdOfChannel1, stdOfChannel2, stdOfChannel3]
)
由于数据集中的图像只有一个通道,因此我们只需要传递均值和标准差值即可。为此,我们需要首先计算这些值。有时,这些值可能会在线发布到某个地方,因此我们可以通过这种方式获取它们。但是,如果有疑问,我们可以手动计算。
有两种方法可以完成。简单的方法,更困难的方法。如果数据集足够小以一次全部放入内存,则可以轻松实现。否则,我们必须遍历稍难的数据。
Calculating mean And std The Easy Way
简单的方法很容易。 我们要做的就是使用数据加载器加载数据集,并获得包含所有数据的单个批处理张量。 为此,我们将批次大小设置为等于训练集长度。
loader = DataLoader(train_set, batch_size=len(train_set), num_workers=1)
data = next(iter(loader))
data[0].mean()