在经过卷积层提取特征、池化层压缩空间、激活函数引入非线性后,神经网络进入了最后的决策阶段。线性层(Linear Layer),也称为全连接层(Fully Connected Layer),负责将这些抽象特征映射到最终的分类结果上。
1. 线性层的核心原理
线性层执行的是最基本的线性变换:
。
- x:输入向量。
- A:权重矩阵(Weights),也就是神经网络需要学习的核心参数。
- b:偏置(Bias)。
- 本质:它将输入空间的每一个点与输出空间的每一个点进行"全连接"。例如,将 196608 个特征值压缩映射到 10 个分类结果(如 CIFAR-10 的十个类别)上。
2. 关键操作:数据展平(Flatten)
线性层通常要求输入是一维向量 (除了 Batch 维度)。但卷积层的输出通常是四维张量 [Batch, Channel, Height, Width]。因此,在进入线性层之前,必须进行"展平"操作。
文件中展示了两种展平方法:
- 方法一: torch.reshape
- 方法二: torch.flatten**(推荐)**
3. 实战代码:构建全连接分类网络
文件通过以下代码展示了如何将 CIFAR-10 的图片通过线性层降维:
4. 什么是神经网络在"训练"的东西?
文件开篇提到:"神经网络训练的就是函数系 。"
在线性层中,这对应的就是权重(Weights)和偏置(Bias)。通过不断的迭代,网络会调整这些系数,使得当一张"猫"的图片输入时,输出向量中对应"猫"那个位置的数值最大。
5. 总结:一个完整的视觉网络结构
通过这一系列的笔记处理,我们现在可以勾勒出一个经典 CNN 的完整结构:
- 输入层:读取图像。
- 特征提取层:卷积(Conv2d)+ 激活(ReLU)+ 池化(MaxPool2d)。
- 转换层:展平(Flatten)。
- 分类决策层:线性层(Linear)。