全连接层(Fully Connected Layer,又称稠密层/Dense Layer)是神经网络中最基础且重要的组件之一,广泛应用于多层感知机(MLP)、卷积神经网络(CNN)和Transformer等架构中。以下是对全连接层的系统分析:
. 核心定义
结构特点:层中每个神经元与上一层的所有神经元相连,每个连接都有独立的权重参数。
数学表达:
2. 核心功能与原理
(1)特征空间变换
通过矩阵乘法将输入映射到新的特征空间,实现特征的组合与抽象。
示例:在图像分类中,CNN 末端的全连接层将卷积提取的局部特征整合为全局语义信息。
(2)非线性拟合能力
结合激活函数(如 ReLU)引入非线性,使网络能够逼近复杂函数(通用近似定理)。
(3)参数量与计算量
参数量:m×n+m(权重 + 偏置)
计算量:矩阵乘法复杂度 O(m×n),易成为计算瓶颈。
- 在全连接神经网络(MLP)中的角色
通常多个全连接层堆叠,层间通过激活函数连接。
层级特征提取:浅层学习低级特征(如边缘),深层组合为高级抽象特征。
- 在CNN中的应用
末端分类器:将卷积层输出的二维特征图展平为一维向量,通过全连接层映射到类别空间。
1.基本使用
importtorchimporttorch.nnasnnimporttorch.nn.functionalasF# 1. 基本创建方式fc_layer=nn.Linear(in_features=784,out_features=256,bias=True)print(f"权重形状:{fc_layer.weight.shape}")# torch.Size([256, 784])print(f"偏置形状:{fc_layer.bias.shape}")# torch.Size([256])# 2. 前向传播示例batch_size=32input_tensor=torch.randn(batch_size,784)# [batch, features]output=fc_layer(input_tensor)# [batch, 256]print(f"输出形状:{output.shape}")2 关键参数详解
classLinear(nn.Module):""" 参数说明: ---------- in_features : int 输入特征维度 out_features : int 输出特征维度 bias : bool, default=True 是否使用偏置项 device : torch.device, optional 计算设备 dtype : torch.dtype, optional 权重数据类型 """def__init__(self,in_features,out_features,bias=True):super().__init__()self.in_features=in_features self.out_features=out_features self.weight=nn.Parameter(torch.Tensor(out_features,in_features))ifbias:self.bias=nn.Parameter(torch.Tensor(out_features))else:self.register_parameter('bias',None)self.reset_parameters()