如何在PyTorch中对输入数据应用线性变换?
我们可以使用**torch.nn.Linear()**模块对输入数据应用线性变换。它支持**TensorFloat32**类型的输入数据。这在深度神经网络中用作一个层来执行线性变换。使用的线性变换为:
y = x * W ^ T + b
这里**x**是输入数据,**y**是线性变换后的输出数据。W是权重矩阵,**b**是偏置。权重**W**的形状为**(out_features, in_features)**,偏置**b**的形状为(out_features)。它们在神经网络训练期间被随机初始化并更新。
语法
torch.nn.Linear(in_features, out_features)
参数
**in_features** - 输入样本的大小。
**out_features** - 输出样本的大小。
步骤
您可以使用以下步骤将线性变换应用于输入数据:
导入所需的库。在以下所有示例中,所需的Python库是**torch**。请确保您已安装它。
import torch
定义输入**张量**并打印它。
input = torch.randn(2,3) print("Input Tensor:
",input)
使用合适的**in_features**和**out_features**定义线性变换。
linear = nn.Linear(in_features, out_features)
将上述定义的线性变换应用于输入数据。并且可以选择将输出赋值给一个新变量。
output = linear(input)
打印线性变换后的张量。
print("Transformed Tensor:
",output)
示例1
# Import the required library import torch import torch.nn as nn # torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None) in_features = 3 out_features = 5 linear = nn.Linear(in_features, out_features) input = torch.randn(2,3) print("Input Tensor:
",input) print("Size of Input Tensor:
",input.size()) # Compute the linear transformation output = linear(input) print("Transformed Tensor:
",output) print("Size of Transformed Tensor:
",output.size())
输出
Input Tensor: tensor([[-0.0921, 0.1992, -1.4930], [-0.0827, 0.0926, -0.1487]]) Size of Input Tensor: torch.Size([2, 3]) Transformed Tensor: tensor([[-0.5778, -0.3074, -0.5339, -0.3443, -0.1688], [-0.3149, -0.2189, -0.1795, -0.3617, -0.0839]], grad_fn=<AddmmBackward>) Size of Transformed Tensor: torch.Size([2, 5])
请注意,线性变换后大小发生了变化。
示例2
# Import the required library import torch import torch.nn as nn # torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None) in_features = 3 out_features = 5 linear = nn.Linear(in_features, out_features, bias=False) input = torch.randn(2,3) print("Input Tensor:
",input) print("Size of Input Tensor:
",input.size()) # Compute the linear transformation output = linear(input) print("Transformed Tensor:
",output) print("Size of Transformed Tensor:
",output.size())
输出
Input Tensor: tensor([[-0.6691, -1.6172, -0.9707], [-0.4425, 1.4376, -0.8004]]) Size of Input Tensor: torch.Size([2, 3]) Transformed Tensor: tensor([[ 0.3554, 1.3869, 0.5136, -0.1801, -0.5858], [ 0.3262, 0.2073, -0.8602, -0.0161, 0.5233]], grad_fn=<MmBackward>) Size of Transformed Tensor: torch.Size([2, 5])
请注意线性变换后大小是如何变化的。
广告