当前位置: 首页 > news >正文

DAY 39 超大力王爱学Python

知识点回顾

  1. 图像数据的格式:灰度和彩色数据
  2. 模型的定义
  3. 显存占用的4种地方
    1. 模型参数+梯度参数
    2. 优化器参数
    3. 数据批量所占显存
    4. 神经元输出中间状态
  4. batchisize和训练的关系

作业:今日代码较少,理解内容即可

以下是根据你提供的 4 个核心要点进行的总结,结合历史对话中的技术细节和代码示例:

一、图像数据的格式:灰度与彩色图像

1. 灰度图像(以 MNIST 为例)
  • 通道数:1(仅亮度信息,无颜色)。
  • 形状(通道, 高, 宽),如 MNIST 为(1, 28, 28)
  • 数据范围:原始像素值为0-255uint8),经ToTensor()转换后归一化为[0, 1]float32类型。
  • 显示方式:需反归一化并调整维度顺序(PyTorch 默认通道优先,Matplotlib 需转为(高, 宽, 通道))。
2. 彩色图像(以 CIFAR-10 为例)
  • 通道数:3(RGB 三通道)。
  • 形状(3, 32, 32)(CIFAR-10),展平后为3×32×32=3072维向量。
  • 标准化:通常使用transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))将像素值从[0, 1]缩放到[-1, 1]

二、模型的定义:以 MLP 为例

1. 灰度图像模型(MNIST)

python

class MLP(nn.Module):def __init__(self):super().__init__()self.flatten = nn.Flatten()  # 展平为784维self.fc1 = nn.Linear(784, 128)self.relu = nn.ReLU()self.fc2 = nn.Linear(128, 10)  # 10个数字类别def forward(self, x):x = self.flatten(x)  # 输入形状:(batch, 1, 28, 28) → (batch, 784)x = self.fc1(x) → (batch, 128)x = self.relu(x)x = self.fc2(x) → (batch, 10)
2. 彩色图像模型(CIFAR-10)

python

class MLP(nn.Module):def __init__(self):super().__init__()self.flatten = nn.Flatten()  # 展平为3×32×32=3072维self.fc1 = nn.Linear(3072, 128)self.relu = nn.ReLU()self.fc2 = nn.Linear(128, 10)  # 10个物体类别
关键差异
  • 输入维度:灰度图展平后为784维,彩色图为3072维。
  • 模型参数:彩色图模型参数更多(如第一层权重:3072×128 vs 784×128)。
  • batch 维度:模型定义不涉及batch_size,由DataLoader处理,如DataLoader(dataset, batch_size=64)

三、显存占用的 4 个主要部分

1. 模型参数与梯度(必占)
  • 参数:模型权重(如fc1.weight),单精度(float32)下每个参数占 4 字节。
    • 例:MNIST 的 MLP 参数总量101,770,占用约101770×4≈403 KB
  • 梯度:反向传播时自动计算,占用与参数相同空间(总占用≈806 KB)。
2. 优化器状态(可选,如 Adam)
  • SGD:无额外占用。
  • Adam:每个参数存储动量(m)和平方梯度(v),额外占用2×参数大小
    • 例:MNIST 模型使用 Adam 时,额外占用101770×8≈806 KB
3. 数据批量(batch_size 直接影响)
  • 单张图像:灰度图(1×28×28×4)占 3 KB,彩色图(3×32×32×4)占 12 KB。
  • 批量占用batch_size×单张占用
    • 例:batch_size=1024时,CIFAR-10 数据占用1024×12 KB≈12 MB
4. 中间变量(前向 / 反向传播)
  • 隐藏层输出:如 MLP 的fc1输出为(batch, 128),占batch×128×4字节。
    • 例:batch_size=1024时,中间变量占1024×128×4≈512 KB

四、batch_size 与训练的关系

1. 核心影响
batch_size优势风险 / 缺点
小(如 16)显存占用小,适合小显存设备梯度噪声大,训练波动大,迭代次数多
大(如 1024)并行计算效率高,梯度更稳定(平均效应)可能触发 OOM,收敛速度可能变慢
2. 最佳实践
  • 显存限制:通过nvidia-smi监控显存,设置batch_size为显存允许的最大值的 80%(预留安全空间)。
  • 动态调整:从较小值(如 16)开始,逐步增加直至出现 OOM,选择略小值。
  • 优化器选择:Adam 比 SGD 占用更多显存,大batch_size需注意优化器状态开销。
3. 代码示例(设置 batch_size)

总结对比

要点灰度图像彩色图像
数据形状(1, 28, 28)(3, 32, 32)
模型输入维度7843072
显存占用(batch=64)约 1 MB约 5 MB
典型 batch_size128-102464-512
 

通过合理设计模型结构、优化显存占用,并根据硬件调整batch_size,可在保证训练稳定性的同时最大化计算效率。

@浙大疏锦行

相关文章:

  • 通过《哪吒》看人生百态
  • MySQL 全量 增量备份与恢复
  • MySQL中SELECT查询的执行顺序
  • MySQL中的字符串分割函数
  • Baklib知识中台重塑企业知识生态
  • 软件测评师教程 第9章 基于质量特性的测试与评价 笔记
  • 量子物理:初步认识量子物理
  • hooks组件-useState
  • 前缀和题目:一维数组的动态和
  • 九(4).存在指针的引用,不存在引用的指针
  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)
  • ubuntu 添加应用到启动菜单
  • CppCon 2014 学习:Hardening Your Code
  • 【Python 进阶2】抽象方法和实例调用方法
  • FDR的定位原理
  • Spring 5 响应式编程:构建高性能全栈应用的关键
  • PID项目-记事本不显示下划线
  • 《软件项目管理》第二章(项目准备与启动)期末周复习总结笔记
  • 九(2).参数类型为引用结构体类型
  • 网络营销是什么工作内容/网站优化入门
  • wordpress连接微博专业版 破解/郑州seo外包费用
  • 广州中英文网站建设/百度广告优化
  • 建站工作室 网站建设工作室/南宁网络推广有限公司
  • 网站制作常见问题 图片版权/百度推广外包哪家不错
  • 可以在哪些网站 APP做推广/网站自然优化