📜  Pytorch中传入数据的线性变换

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

Pytorch中传入数据的线性变换

我们可以使用 PyTorch 中的torch.nn.Linear()模块对传入数据应用线性变换。该模块旨在在神经网络中创建一个线性层。线性层计算线性变换如下 -

y=xA^T+b

在哪里

  • x  是传入的数据。它必须是 dtype float32 和 shape (*, in_features) 的张量。这里 * 是任意数量的维度。 in_features 是输入数据中的特征数。
  • y  是转换后的输出数据,具有相同的 dtype x  和形状(*,out_features)。请注意,除了最后一个维度之外的所有维度都与输入数据具有相同的形状。
  • A  是形状的可学习权重(out_features,in_features)。 out_features 是输出数据的最后一个维度。
  • b  是在训练过程中学到的额外偏差。

请注意,权重A  和偏见b  是随机初始化的。

逐步实施

以下是将线性变换应用于传入数据的步骤 -

第 1 步:导入 PyTorch

所需的库是 PyTorch。第一步是导入 PyTorch。

Python3
import torch


Python3
data = torch.randn(3,4)


Python3
in_features = 4
out_features = 2


Python3
linear = torch.nn.Linear(in_features, out_features)


Python3
data_out = linear(data)


Python3
# Python program to apply Linear transform
# to incoming data
# Step 1: Importing PyTorch
import torch
  
# Step 2: Define incoming data as torch 
# tensor (float32)
data = torch.tensor([23., 12., 33., 4.01, -65.])
print("Data before Transformation:\n", data)
print("dtype of Data:", data.dtype)
print("Size of Data:", data.size())
  
# Step 3: Define the in_features, out_features
in_features = 5
out_features = 3
  
# Step 4: Define a linear transformation
linear = torch.nn.Linear(in_features, out_features)
  
# Step 5: Apply the Linear transformation to 
# the tensor
data_out = linear(data)
print("Data after Transformation:\n", data_out)
print("Size of Data after Transformation:", data_out.size())


Python3
# Python program to apply Linear transform
# to incoming data
# Step 1: Importing PyTorch
import torch
  
# Step 2: Define input data as torch tensor (float32)
data = torch.randn(3, 4)
print("Tensor before Transformation:\n", data)
print("dtype of Tensor:", data.dtype)
print("Size of Tensor:", data.size())
  
# Step 3: Define the in_features, out_features
in_features = 4
out_features = 2
  
# Step 4: Define a linear transformation
linear = torch.nn.Linear(in_features, out_features)
  
# Step 5: Apply the Linear transformation to the tensor
data_out = linear(data)
print("Transformed Tensor:\n", data_out)
print("Size of Transformed Tensor:", data_out.size())


第 2 步:定义输入数据

现在定义输入数据。我们将对这些数据应用线性变换。输入数据必须是 dtype float32 的张量。我们使用随机生成器创建了一个大小为 [3, 4] 的张量。我们可以将此张量解释为三个样本的输入,每个样本的大小为 4。对于输入数据 in_features = 4,请参见下一步。请注意,在神经网络中,此数据来自前一层。

Python3

data = torch.randn(3,4)

步骤 3:定义输入和输出特征的数量

“in_features”是每个输入样本中的特征数,“out_features”是每个输出样本中的特征数。 in_features 取决于输入张量,如第二步中 in_features = 4。out_features 根据我们的需要和神经网络架构决定。

Python3

in_features = 4
out_features = 2

第 4 步:定义线性变换

我们使用 torch.nn.Linear() 模块定义线性变换“线性”。我们将 in-features 和 out_features 作为参数传递。如果我们不希望层学习偏差,我们也可以传递可选参数bias = False。请注意,模块 torch.nn.Linear() 作为神经网络中的一个层执行。

Python3

linear = torch.nn.Linear(in_features, out_features)

第 5 步:将线性变换应用于输入数据:

现在我们将定义的线性变换应用于输入数据(输入数据)。我们可以打印输出数据,转换后输出数据的形状和大小。

Python3

data_out = linear(data)

示例 1:

这里 in_features=5 作为输入数据大小是 [5]。并且我们设置out_features = 3,所以输出数据(转换后的数据)的大小为[3]。在上面的例子中,输入数据是一维张量。

Python3

# Python program to apply Linear transform
# to incoming data
# Step 1: Importing PyTorch
import torch
  
# Step 2: Define incoming data as torch 
# tensor (float32)
data = torch.tensor([23., 12., 33., 4.01, -65.])
print("Data before Transformation:\n", data)
print("dtype of Data:", data.dtype)
print("Size of Data:", data.size())
  
# Step 3: Define the in_features, out_features
in_features = 5
out_features = 3
  
# Step 4: Define a linear transformation
linear = torch.nn.Linear(in_features, out_features)
  
# Step 5: Apply the Linear transformation to 
# the tensor
data_out = linear(data)
print("Data after Transformation:\n", data_out)
print("Size of Data after Transformation:", data_out.size())

输出:

由于权重和偏差是随机初始化的,因此您可能会在每次运行时获得具有不同元素的输出张量。

Data before Transformation:
 tensor([ 23.0000,  12.0000,  33.0000,   4.0100, -65.0000])
dtype of Data: torch.float32
Size of Data: torch.Size([5])
Data after Transformation:
 tensor([-6.3559, -1.5512, 22.3267], grad_fn=)
Size of Data after Transformation: torch.Size([3])

示例 2:

这里 in_features=4 作为输入张量大小是 [3, 4]。并且我们设置out_features = 2,所以输出张量(变换后的数据)的大小为[3, 2]。除最后一个维度外的维度与输入张量相同。最后一个维度与 out_features 相同。

Python3

# Python program to apply Linear transform
# to incoming data
# Step 1: Importing PyTorch
import torch
  
# Step 2: Define input data as torch tensor (float32)
data = torch.randn(3, 4)
print("Tensor before Transformation:\n", data)
print("dtype of Tensor:", data.dtype)
print("Size of Tensor:", data.size())
  
# Step 3: Define the in_features, out_features
in_features = 4
out_features = 2
  
# Step 4: Define a linear transformation
linear = torch.nn.Linear(in_features, out_features)
  
# Step 5: Apply the Linear transformation to the tensor
data_out = linear(data)
print("Transformed Tensor:\n", data_out)
print("Size of Transformed Tensor:", data_out.size())

输出:

由于权重和偏差是随机初始化的,因此您可能会在每次运行时获得具有不同元素的输出张量。

Tensor before Transformation:
 tensor([[ 0.0664,  1.8933, -0.4003, -0.2383],
        [-0.7531,  1.8737, -2.0936, -0.8959],
        [-1.6239, -1.1321, -0.5427, -0.4834]])
dtype of Tensor: torch.float32
Size of Tensor: torch.Size([3, 4])
Transformed Tensor:
 tensor([[-0.5405,  0.4570],
        [-0.5507, -0.3917],
        [ 0.4763, -0.3399]], grad_fn=)
Size of Transformed Tensor: torch.Size([3, 2])