PyTorch深度学习与实践【概念笔记01】

发布时间:2026/8/11 11:47:08
PyTorch深度学习与实践【概念笔记01】 一、Bottleneck 瓶颈块全套知识点总结一核心模块Bottleneck 瓶颈块结构与原理1. 三层卷积完整流程1×1 降维→3×3 提取特征→1×1 升维1×1 卷积作用核心解惑1×1 卷积只对单像素运算不改变特征图长宽仅修改通道数量降维输入高通道特征如 256 通道用更少数量的 1×1 卷积核融合所有输入通道像素压缩为窄通道64 通道大幅降低后续计算量升维窄通道做完 3×3 卷积的特征提取后用大量 1×1 卷积核将少量特征重新组合还原为原始通道数保证能和输入做残差相加关键规则1×1 卷积核的总个数 输出通道数量。3×3 卷积作用抓取相邻像素的空间信息边缘、纹理、物体轮廓是特征提取核心。缺点高通道下参数量、计算量爆炸。因此搭配 1×1 降维在窄通道执行 3×3 卷积节省算力。命名由来中间通道被压缩收窄外形类似瓶子细腰故称瓶颈块。2. 残差短路连接公式 恒等映射详解计算公式(y x F(x))x模块原始输入特征图(F(x))输入经过三层 Bottleneck 卷积变换后的特征y模块最终输出。短路支路与恒等映射恒等映射短路支路输入x不经过任何卷积、不做任何计算原封不动直接传输到模块末尾两条并行支路主线三层卷积提取新特征、短路支路原始输入直接传递相加前提输入x与卷积结果(F(x))通道、尺寸完全一致核心价值解决深层网络梯度消失反向传播时梯度可走短路捷径无损传回浅层支持搭建百层深度网络。3. Bottleneck vs BasicBlock算力差异BasicBlockResNet18/34浅层专用两层 3×3 卷积无通道压缩同等通道下参数量、计算量极大网络层数少时可以使用BottleneckResNet50/101/152深层专用依靠 1×1 卷积压缩通道参数量仅为 BasicBlock 十几分之一堆叠上百层网络必须使用否则显存、算力会过载。二通道、特征图、维度基础概念梳理核心混淆点解答1. 通道数 特征图张数 特征种类无矛盾基础定义通道数代表对应灰度特征图的总数量每张特征图对应一套独立的特征检测规则RGB 原图3 通道 3 张灰度图红、绿、蓝色彩基础特征卷积后 64 通道 64 张灰度图每张图只对一种图像纹理敏感不存在完全相同一模一样的特征图网络初始化卷积核权重随机训练时损失函数会强制每张图学习不同特征完全相同的特征图属于冗余无效参数训练会自动修正。2. 张量维度、通道维度、维度长度人话解释标准图像张量格式[N, C, H, W]批次通道高宽维度数组的坐标轴 / 分类标准4 个数字对应 4 套区分规则通道维度例第二个坐标轴专门用来区分单张原图内部不同的灰度特征图维度长度某一根坐标轴上元素的总数通道维度的长度 通道数类比表格有行、列两个维度表格 10 行 行维度长度为 10。3. 批次 N原图数量与通道灰度图的层级区分最易混淆点N批次维度第一个数一批训练数据里原始实拍图片的总张数外层分组独立完整原图通道数 C第二个数单独一张原图经过卷积后生成的灰度特征图数量内层细分单张原图内部的抽象小图举例张量[3, 2048, 7, 7]一批 3 张原图每张原图生成 2048 张 7×7 灰度特征图整批数据总灰度图 3×2048 张二者层级、概念完全不同。三单张原图生成大量灰度特征图的完整流程原始 RGB 原图天然拆分为 3 张基础灰度图R/G/B 三通道卷积层包含多套独立卷积核模具每套模具融合原图全部通道像素加权计算输出1 张全新灰度特征图模具总数量 输出通道数64 套模具生成 64 张特征图2048 套模具生成 2048 张特征图多层卷积持续升维浅层输出少通道特征图深层 Bottleneck 不断升维最终单张原图可生成数千张抽象灰度特征图。四摊平Flatten机制卷积输出形状[N,2048,7,7]每张原图 2048 张 7×7 像素灰度图平均池化压缩空间尺寸每张 7×7 特征图压缩至 1 个像素张量变为[N,2048,1,1]摊平操作删除无意义的空间维度1,1张量转为二维[N,2048]摊平后的通道总数一维向量长度等于原始通道数 2048作为全连接层的输入特征长度。二、神经网络的底层设计只认「批量输入Batch」一所有 PyTorch 里的CNNResNet、VGG、AlexNet原生只接受 4 维张量格式固定为[batch_size, channel, height, width] → 简写 [B, C, H, W]1. 不加 batch 维度会报错你预处理完的单张图片 img_t 形状是 [C, H, W]3 维。直接丢进模型 model(img_t)网络会报错。原因卷积层、池化层内部运算逻辑默认第 0 维是批量数量代码没有兼容单张 3 维图片的分支。2. batch 维度到底代表什么batch_size 一次并行送入网络的图片数量batch_size8一次性推理 8 张图batch_size1一次性推理 1 张图torch.unsqueeze(img_t, 0) 在最前面插入 1 维变换前[3, 224, 224] C, H, W变换后[1, 3, 224, 224]B1, C, H, W(二为什么框架要强制设计 batch 维度1. 训练时并行加速最根本设计初衷GPU 擅长并行计算一次性喂多张图片一起算梯度效率远高于一张一张串行跑。训练时我们都会设置大 batch32/64/128框架统一用 4 维输入推理时也沿用同一套标准不用区分「训练 / 单张预测」两套代码。2. 网络内部运算逻辑统一卷积、BN 层批归一化 BatchNorm极度依赖 batch 维度BatchNorm 会沿着 batch 维度计算均值、方差做标准化如果没有第 0 维 batchBN 层无法计算直接逻辑崩溃。3. 代码一套通吃不用分支判断统一 4 维输入后训练batch_t [32, 3, 224, 224] 32 张图单张推理batch_t [1, 3, 224, 224] 1 张图模型推理代码完全不用改不用写 if 判断区分单张 / 多张代码复用性更强。