神经网络——线性层
在机器学习中,线性层(Linear Layer) 是一种基础的神经网络组件,也称为全连接层(Fully Connected Layer) 或密集层(Dense Layer)。
其严格的数学定义为:对输入数据执行线性变换,生成输出向量。
具体形式为:
Y=XW+b
其中:
-
X 是输入张量,通常形状为
[批次大小, 输入维度]
; -
W 是可学习的权重矩阵,形状为
[输入维度, 输出维度]
; -
b 是可学习的偏置向量,形状为
[输出维度]
; -
Y 是输出张量,形状为
[批次大小, 输出维度]
。
核心特性:
-
参数共享:同一层内的所有输入神经元都通过权重矩阵 W 与输出神经元相连,权重在整个输入空间中共享。
-
线性变换:仅能表示线性函数,因此通常与非线性激活函数(如 ReLU)组合使用,以增强模型表达能力。
-
特征投影:本质上是将输入特征投影到新的特征空间,输出维度决定了新空间的维度。
线性网络:
参数
in_features (int) – 每个输入样本的大小
out_features (int) – 每个输出样本的大小
bias (bool) – 如果设置为
False
,该层将不学习加性偏置。默认值:True
代码举例
import torchimport torchvisionfrom torch import nnfrom torch.nn import Linearfrom torch.utils.data import DataLoaderfrom torch.utils.tensorboard import SummaryWriterdataset = torchvision.datasets.CIFAR10(\"../torchvision_dataset\", train=False, transform=torchvision.transforms.ToTensor(), download=True)dataloader = DataLoader(dataset, batch_size=64)class MyModule(nn.Module): def __init__(self): super().__init__() \"\"\" 下文: 展开前: torch.Size([64, 3, 32, 32]) 展开后: torch.Size([1, 1, 1, 196608]) \"\"\" self.linear = Linear(196608, 10) def forward(self, input): output = self.linear(input) return outputmodule = MyModule()for data in dataloader: imgs, targets = data print(\"原本图像尺寸\", imgs.shape) # 把二维图片展开成一维的 # imgs=torch.reshape(imgs,(1,1,1,-1)) imgs = torch.flatten(imgs) print(\"展平后图像尺寸\", imgs.shape) output = module(imgs) print(\"经过线性层处理后图像尺寸\", output.shape)