深度学习篇---模型权重变化与维度分析
文章目录
- 前言
- 1. 权重的作用
- 2. 权重的维度
- 全连接层
- 卷积层
- 3. 权重的变化
- 4.实例代码(PyTorch 框架)
- 场景
- 代码解释
- 模型定义
- 数据生成
- 优化设置
- 初始权重
- 设置训练循环
- 前向传播
- 反向传播
- 更新权重
- 结果输出
- 维度与变化总结
- 维度匹配
- 梯度跟新
- 5. 增加网络深度:多层感知机(MLP)
- 代码解释
- 6. 权重初始化的影响
- 核心概念
- 7. 正则化:限制权重的自由度
- 8. 梯度问题与解决方案
- 9. 可视化权重变化
- 结果分析
- 10.总结:深度带来的挑战与解决策略
- 11. 卷积层的权重维度与计算
- 核心概念
- 卷积核
- 输入通道
- 输出通道
- 权重维度公式
- 输入输出尺寸公式
- 12. 实例代码:CNN模型构建与维度分析
- 维度传递解析
- 输入数据
- 卷积层1
- 卷积层2
- 全连接层
- 13. 卷积核权重的动态变化
- 可视化卷积核(代码示例)
- 结果分析
- 初始卷积核
- 训练后卷积核
- 14. 池化层的作用
- 下采样
- 维度变化
- 15. CNN的权重更新与正则化
- 优化器设置(含L2正则化)
- 反向传播流程
- 计算损失
- 反向传播速度
- 更新权重
- 16. CNN与全连接层的对比
- 17.总结:CNN权重的核心特点
- 维度动态变化
- 权重共享与局部感知
- 训练动态性
前言
通过增加网络深度和引入高级技术,模型可以解决更复杂的问题(如图像分类、自然语言处理)。理解权重的动态变化和维度传递,是设计高效神经网络的关键。本文简单介绍了神经网络模型权重变化与维度分析的相关知识。
1. 权重的作用
在深度学习中,权重(Weight) 是神经网络的核心参数。每个神经元通过权重对输入数据进行加权求和,再经过激活函数输出结果。训练模型时,通过调整权重使得预测结果接近真实值,这一过程称为“学习”。
2. 权重的维度
权重的维度由网络层的结构决定:
全连接层
全连接层:若输入特征数为 m,输出特征数为 n,权重维度为 (n, m)。
卷积层
卷积层:若使用 k 个大小为 3x3 的卷积核,输入通道为 c,则权重维度为 (k, c, 3, 3)(PyTorch 格式)。
3. 权重的变化
通过反向传播计算损失函数的梯度,优化器(如 SGD)按学习率调整权重:
新权重 = 旧权重 - 学习率 × 梯度
4.实例代码(PyTorch 框架)
场景
场景:线性回归模型(y = 2x + 1 + 噪声)
python
import torch
import torch.nn as nn
import torch.optim as optim# 1. 定义模型
class LinearModel(nn.Module):def __init__(self):super().__init__()self.linear = nn.Linear(1, 1) # 输入1维,输出1维def forward(self, x):return self.linear(x)model = LinearModel()# 2. 生成数据
x_train = torch.rand(100, 1) * 10 # 100个输入样本
y_train = 2 * x_train + 1 + torch.randn(x_train.shape) # 真实值 + 噪声# 3. 设置损失函数和优化器
criterion = nn.MSELoss() # 均方误差损失
optimizer = optim.SGD(model.parameters(), lr=0.01) # 学习率0.01# 4. 打印初始权重
print("初始权重:", model.linear.weight.data.item())
print("初始偏置:", model.linear.bias.data.item())# 5. 训练模型
epochs = 100
for epoch in range(epochs):# 前向传播outputs = model(x_train)loss = criterion(outputs, y_train)# 反向传播optimizer.zero_grad() # 清空梯度loss.backward() # 计算梯度optimizer.step() # 更新权重# 每20次打印损失if (epoch+1) % 20 == 0:print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item():.4f}')