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

请注意线性变换后大小是如何变化的。

更新于:2022年1月20日

752 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告