前言
在讲Linear线性变换之前,先来看一个矩阵变换的例子
from __future__ import print_function
import torch
in_features = torch.tensor([2,2,2,2], dtype=torch.float32)
weight_matrix = torch.tensor([
[5,5,5],
[3,3,3],
[4,4,4],
[2,2,2]
], dtype=torch.float32)
out_features = in_features.matmul(weight_matrix)
print(out_features)
打印输出: tensor([28., 28., 28.])
例子中创建了一个叫in_features一维张量,一个weight_matrix 权重矩阵二维张量。然后,使用matmul()函数来执行生成一维张量的矩阵乘法运算。它把一个有四个元素的一维张量映射成一个有三个元素的一维张量。
这就是Linear的工作原理。它们使用权重矩阵将一个in_feature空间映射到一个out_feature空间。 原理:对输入的数据应用线性转换: y = xA^T + b。
函数原型
torch.nn.Linear(in_features, out_features, bias=True, device=None, dtype=None)
参数说明
in_features:指的是输入的二维张量的大小,即输入的[batch_size, size]中的size。 out_features:指的是输出的二维张量的大小,即输出的二维张量的形状为[batch_size,out_features]。 回到文章开头矩阵相乘的例子,创建的in_features一维张量结构为[1,4],那么4就是Linear输入的二维张量的大小,weight_matrix 权重矩阵二维张量的结构为[4,3],那么这里的3就是Linear输出的二维张量的大小。根据矩阵乘法的线性代数规则,当我们传in_features = 4,out_features = 3给Linear()函数时,PyTorch LinearLayer类会自动创建一个4 x 3的权重矩阵。
示例
m = torch.nn.Linear(4, 3)
input = torch.tensor([2,2,2,2], dtype=torch.float32)
output = m(input)
print(output)
打印输出:
|