PyTorch 的 Linear 层详解:全连接层到底做了什么
在 PyTorch 里,nn.Linear 是最常见的层之一。
它也叫全连接层。很多入门模型、分类器、回归模型都会用到它。
如果你能理解 Linear 层,很多神经网络结构都会变得更容易读。
Linear 层做了什么
Linear 层本质上做的是一次线性变换:
输出 = 输入 * 权重 + 偏置
在 PyTorch 里可以这样写:
from torch import nn layer = nn.Linear(in_features=4, out_features=2)
这表示输入有 4 个特征,输出有 2 个特征。
in_features 和 out_features
理解 Linear 层,最重要的是理解这两个参数:
-
in_features:每个样本输入特征的数量 -
out_features:每个样本输出特征的数量
比如一个样本有 4 个数:
[身高, 体重, 年龄, 运动频率]
如果我们想把它映射成 2 个输出,就可以用 nn.Linear(4, 2)。
输入 shape 应该是什么
Linear 层最常见的输入形状是:
[batch_size, in_features]
比如:
import torch from torch import nn x = torch.randn(32, 4) layer = nn.Linear(4, 2) y = layer(x) print(y.shape)
输出就是:
torch.Size([32, 2])
这里 32 个样本被一起送进模型,每个样本从 4 个特征变成 2 个输出。
Linear 层有参数吗
有。
Linear 层内部会自动创建权重和偏置。
你可以这样看:
print(layer.weight.shape) print(layer.bias.shape)
对于 nn.Linear(4, 2),权重形状通常是 [2, 4],偏置形状是 [2]。
这些参数会在训练过程中被优化器更新。
为什么它叫全连接
因为输入的每一个特征,都会连接到输出的每一个神经元。
如果输入有 4 个特征,输出有 2 个神经元,那么每个输出都会看到全部 4 个输入。
这就是“全连接”的意思。
小结
Linear 层是神经网络里最基础的计算模块之一。
它做的是从一个特征空间到另一个特征空间的线性映射。
刚开始学 PyTorch 时,先把 in_features、out_features 和输入 shape 搞清楚,就已经解决了一大半困惑。
技术图:把关键链路画清楚
可运行实验:手算一次 Linear 层输出
nn.Linear 执行的是 y=xWᵀ+b。手动设置权重和偏置后,可以逐项核对框架输出。
import torch
from torch import nn
layer = nn.Linear(2, 1)
with torch.no_grad():
layer.weight.copy_(torch.tensor([[2.0, -1.0]]))
layer.bias.copy_(torch.tensor([0.5]))
x = torch.tensor([[3.0, 4.0], [1.0, -2.0]])
print("输出:", layer(x).squeeze(1).tolist())
print("参数 shape:", tuple(layer.weight.shape), tuple(layer.bias.shape))
运行结果:
输出: [2.5, 4.5] 参数 shape: (1, 2) (1,)
第一个样本结果是 3×2 + 4×(-1) + 0.5 = 2.5。权重 shape 按 [out_features, in_features] 保存。
常见误区
-
in_features包含 batch size。它只表示每个样本最后一维的特征数。 -
Linear 层本身能拟合任意非线性关系。多层 Linear 之间没有激活函数时仍等价于一次线性变换。
动手练习
把输出维度改为 2,自行设置一个 2×2 权重矩阵并手算两个输出。
本文首发于「去你想去的地方」: PyTorch 的 Linear 层详解:全连接层到底做了什么 | 去你想去的地方
完整学习路线、视频版和后续更新请访问原文。
更多推荐





所有评论(0)