如何在 Pytorch 中将张量归一化为 0 均值和 1 方差?
PyTorch 中的张量类似于 NumPy 数组,不同之处在于张量可以利用 GPU 的能力,而数组不能。为了对张量进行归一化,我们对张量进行变换,使均值和标准差分别变为 0 和 1。我们知道方差是标准差的平方,所以方差也变为 1。
我们可以采取以下步骤将张量归一化为 0 均值和 1 方差
逐步实施
步骤 1:导入所需的库
唯一需要的库是 PyTorch。 PyTorch 是Python的机器学习库。我们可以使用下面的代码导入它。请确保您已经安装了它。
Python3
import torch
Python3
t = torch.tensor([1.,2.,3.,4.,5.])
Python3
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
Python3
t = (t-mean)/std
Python3
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, std and Var after normalize:\n", mean, std, var)
Python3
# Python program to normalize a tensor to
# 0 mean and 1 variance
# Step 1: Importing torch
import torch
# Step 2: creating a torch tensor
t = torch.tensor([1.,2.,3.,4.,5.])
print("Tensor before Normalize:\n", t)
# Step 3: Computing the mean, std and variance
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, Std and Var before Normalize:\n",
mean, std, var)
# Step 4: Normalizing the tensor
t = (t-mean)/std
print("Tensor after Normalize:\n", t)
# Step 5: Again compute the mean, std and variance
# after Normalize
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, std and Var after normalize:\n",
mean, std, var)
第 2 步:创建 PyTorch 张量
在 PyTorch 中有多种创建张量的方法。创建一个您想用 0 均值和 1 方差对其进行归一化的张量。我们已经创建了一个大小为 5 的浮点张量。您可以按照文章 PyTorch 中的张量来创建张量。
Python3
t = torch.tensor([1.,2.,3.,4.,5.])
第 3 步:计算张量的均值、标准偏差 (Std) 和方差
我们在对张量进行归一化之前计算平均标准差 (std) 和方差。我们将使用均值和标准差来归一化张量(下一步)。我们在对张量进行归一化之前计算了方差,以将其与对张量进行归一化后的方差进行比较。
Python3
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
第 4 步:使用均值和标准偏差对张量进行归一化
为了标准化输入张量,我们首先从张量中减去平均值,然后将结果除以标准差。打印张量以查看张量在归一化后的样子。
Python3
t = (t-mean)/std
第 5 步:再次计算均值和方差以验证 0 均值和 1 方差
我们再次计算均值、标准差和方差,以验证在对张量进行归一化后,现在均值为 0,方差为 1。
Python3
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, std and Var after normalize:\n", mean, std, var)
例子:
现在让我们看一下将输入张量归一化为 0 均值和 1 方差的上述步骤的完整代码,并看到在归一化张量后均值为 0 方差为 1。注意输入张量如何转换为新的归一化后的张量。
Python3
# Python program to normalize a tensor to
# 0 mean and 1 variance
# Step 1: Importing torch
import torch
# Step 2: creating a torch tensor
t = torch.tensor([1.,2.,3.,4.,5.])
print("Tensor before Normalize:\n", t)
# Step 3: Computing the mean, std and variance
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, Std and Var before Normalize:\n",
mean, std, var)
# Step 4: Normalizing the tensor
t = (t-mean)/std
print("Tensor after Normalize:\n", t)
# Step 5: Again compute the mean, std and variance
# after Normalize
mean, std, var = torch.mean(t), torch.std(t), torch.var(t)
print("Mean, std and Var after normalize:\n",
mean, std, var)
输出:
Tensor before Normalize:
tensor([1., 2., 3., 4., 5.])
Mean, Std and Var before Normalize:
tensor(3.) tensor(1.5811) tensor(2.5000)
Tensor after Normalize:
tensor([-1.2649, -0.6325, 0.0000, 0.6325, 1.2649])
Mean, std and Var after normalize:
tensor(0.) tensor(1.) tensor(1.)