PyTorch 的 Linear 层详解:全连接层到底做了什么

Linear 层本质上是一次线性变换,它把输入特征通过权重矩阵和偏置映射到新的输出空间。

学习路线:AI 入门与 PyTorch 基础(1~20) · 第 16 课
第 16 课神经网络节点图和一条线性映射示意图,表现 PyTorch Linear 层的计算。
Learning Path

AI 入门与 PyTorch 基础(1~20)

从 AI 基本概念、机器学习任务、深度学习直觉、PyTorch 入门到中文文本分类项目全貌。

学完本阶段你能做到:能说清 AI、机器学习、深度学习、PyTorch 训练流程和一个中文文本分类项目的大致链路。

推荐读法:零基础建议顺序阅读;已有基础的读者可以把它当作路线地图和查漏补缺清单。

查看完整阶段 · 20 篇
Lesson Guide

这一课怎么学

先看目标,再带着问题读正文。读完后用练习确认自己真的理解了。

本节你会学到

  • 说清楚「PyTorch 的 Linear 层详解:全连接层到底做了什么」解决的核心问题
  • 知道它在「AI 入门与 PyTorch 基础(1~20)」中的位置
  • 把 Linear 层、深度学习、神经网络 这些关键词联系起来

前置知识

  • 建议先读完上一篇:Tensor 是什么?PyTorch 里最重要的对象讲清楚
  • 能区分输入、输出、数据和模型目标。

概念回顾

  • 【Linear 层】Linear 层做的是矩阵乘法加偏置,是很多神经网络模块的基础零件。 前面或后面会反复用到它。
  • 【深度学习】深度学习可以理解为更复杂的机器学习方法,它让模型通过多层变换逐步提取特征。 前面或后面会反复用到它。
  • 【神经网络】神经网络不是神秘大脑,它更像一组可以不断调整的函数组合。 前面或后面会反复用到它。
  • 【DataLoader】DataLoader 负责把数据一批一批喂给模型,训练循环才不会手忙脚乱。 前面或后面会反复用到它。

核心概念

常见误区

  • 不要只记定义,要追问它解决了什么问题。
  • 不要只看 API 名字,要同时关注输入输出 shape 和训练流程。

课后练习

  • 用 3 句话向一个零基础朋友解释「PyTorch 的 Linear 层详解:全连接层到底做了什么」。
  • 打开概念库里的「Linear 层」,补一遍它和本文的关系。
  • 读下一课「DataLoader 详解:批量读取、打乱、并行加载有什么用」前,先写下你认为它会解决的问题。

自检练习与参考答案

1. 如果一段 PyTorch 代码报 device 不一致,第一步应该检查什么?

先检查模型参数、输入 Tensor、标签 Tensor 是否在同一个设备上。常见修正是把它们统一 `.to(device)`。

2. 为什么学习 PyTorch 时不能只看 API 名字?

因为训练是否正确经常取决于 shape、dtype、device 和梯度流,API 名字只能告诉你工具,不会保证数据契约正确。

3. 读完本文后,至少应该能画出哪条训练主线?

`输入数据 → forward → loss → backward → optimizer.step()`,并知道本文主题位于这条链路的哪一环。

下一步建议读「DataLoader 详解:批量读取、打乱、并行加载有什么用」。

在 PyTorch 里,nn.Linear 是最常见的层之一。

它也叫全连接层。很多入门模型、分类器、回归模型都会用到它。

如果你能理解 Linear 层,很多神经网络结构都会变得更容易读。

第 16 课视频 · PyTorch 的 Linear 层(约 1 分 38 秒)

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_featuresout_features 和输入 shape 搞清楚,就已经解决了一大半困惑。

Discussion

留言讨论