📜  如何在 Pytorch 中将张量归一化为 0 均值和 1 方差?

📅  最后修改于: 2022-05-13 01:54:23.587000             🧑  作者: Mango

如何在 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.)