一、核心基础:网络权重到底是什么?
1. 权重的作用
神经网络的所有知识、学习到的特征,全部储存在权重参数中。
-
浅层权重:学习基础特征(线条、边缘、纹理)
-
深层权重:学习高级特征(轮廓、局部结构、完整物体)
-
激活函数(ReLU等)没有任何权重参数,仅做数值变换
简单理解:权重就是网络的特征模板,通过权重与输入数据运算,实现特征提取和结果预测。
2. 权重的初始状态与变化
-
初始化阶段 :所有权重都是符合规则的随机数(不是纯乱数,Xavier/He初始化,保证数值合理),每层权重分布天然不同(通道数不同,随机分布参数不同)。
-
训练阶段 :通过反向传播、梯度下降,不断修改随机权重,让权重适配任务,这个过程就是权重偏移。
3. 什么是权重偏移?
训练过程中,权重分布从初始化的「0附近标准正态分布」发生改变,分为两种情况:
-
整体偏移:所有权重整体偏向正数/负数,均值远离0
-
离散变化:均值不变,但权重散开(学得充分)或扎堆归零(梯度消失、失效)
核心公式:w_new = w_old - lr * grad,梯度持续同向,就会推动权重整体偏移。
二、训练 vs 测试(推理)核心区别
1. 训练阶段(完整流程)
前向传播 → 计算Loss → 反向传播求梯度 → 优化器更新权重
会改变权重,网络一直在学习迭代
2. 测试/推理阶段(极简流程)
仅进行前向传播,不反向传播、不计算梯度、不更新权重
权重完全固定不变,只用训练好的模型做预测
3. 测试必备代码规范
model.eval() # 关闭Dropout、冻结BN层 with torch.no_grad(): # 关闭梯度计算,节省显存、提速 pred = model(x) # 仅前向传播推理
三、BatchSize 与 维度详解
1. 什么是 batch_size=32?
32是人为设置的超参数(经验默认值),意思是:一次性给网络喂32个样本,批量计算梯度、更新权重。
可以随意修改为 8、16、64,不改变网络结构。
2. 单样本维度 & 批量维度区别
-
模型定义、summary参数:只写单个样本维度,不带batch
-
真实训练张量:自动在最前面拼接batch维度
-
网络输出的 -1:代表batch维度占位符,适配任意批量大小
3. 常见模型 input_size 写法对照表
| 模型类型 | 单样本input_size | batch=32真实维度 |
|---|---|---|
| MLP全连接网络 | (4,) | (32, 4) |
| CNN图像网络 | (3,224,224) | (32, 3, 224, 224) |
| RNN时序网络 | (10,5) | (32, 10, 5) |
⚠️禁止在input_size中写入batch大小!
四、PyTorch 模型查看工具
1. 原生方法(无需安装)
-
print(model):打印网络层级结构,无参数量 -
model.named_parameters():遍历所有权重、偏置,可做权重统计、可视化(直方图、均值、标准差、极值)
2. torchsummary / torchinfo(推荐)
作用:打印每层输出shape、单层参数量、总参数量、可训练参数
核心原理:构造虚拟样本,执行一次前向传播,推导网络结构信息
安装命令:pip install torchinfo
使用示例:summary(model, input_size=(4,))
五、MLP全连接网络构建规则
-
无显式输入层:输入维度由第一个Linear层的第一个参数决定
-
隐藏层:必须手动指定输出神经元个数
-
输出层:神经元数量对应任务类别数(3分类=3个输出神经元)
参数量计算示例
nn.Linear(10,3)
-
权重参数:10*3 = 30
-
偏置参数:3
-
总参数:33
六、权重可视化的作用
通过绘制每层权重直方图、统计指标(均值/标准差/最大最小值),排查网络训练问题:
-
标准差过小:权重趋近于0,梯度消失,层级失效
-
极值过大:权重数值爆炸,梯度爆炸,训练不稳定
-
分布均匀散开:网络训练正常,学到有效特征