深度学习篇---模型权重变化与维度分析


文章目录

  • 前言
  • 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}')

你可能感兴趣的:(图像处理篇,深度学习篇,程序代码篇,深度学习,人工智能,python,pytorch)