type
Page
status
Invisible
date
Nov 24, 2025
slug
summary
小土堆深度学习快速入门教程学习笔记10
tags
机器学习
深度学习
category
icon
password
神经网络-卷积层(Conv2d)
1. in_channels (输入通道数)
- 含义:输入图像或特征图(Feature Map)的深度(层数)。
- 通俗解释:
- 如果是第一层卷积,处理的是普通彩色图片(RGB),这个值通常是 3。
- 如果是黑白图片(灰度图),这个值是 1。
- 如果是中间层的卷积,这个值必须等于上一层输出的通道数。
2. out_channels (输出通道数)
- 含义:卷积操作完成后,输出的特征图的深度。
- 通俗解释:这也代表了这一层有多少个卷积核(Filter)。每一个卷积核都会提取一种特征,所以这个数值越大,网络能提取的特征种类就越多(但也意味着计算量变大)。
3. kernel_size (卷积核大小)
- 含义:定义卷积核(窗口)的长和宽。
- 类型:可以是整数(int),也可以是元组(tuple)。
- 通俗解释:
- 如果填 3,代表卷积核大小是 。
- 如果填 (3, 5),代表卷积核大小是 。
- 最常用的是和。
4. stride (步长)
- 含义:卷积核在图像上滑动时,每次移动的像素距离。
- 默认值:1。
- 通俗解释:
- stride=1:卷积核一格一格地挪动,提取特征最细致。
- stride=2:卷积核跳着挪动(每次移两格)。这通常会导致输出图像的长宽减半(相当于进行了下采样/缩小图片)。
5. padding (填充)
- 含义:在输入图像的边缘周围补充数据的层数。
- 默认值:0。
- 通俗解释:如果不填充,卷积后的图像会变小(因为边缘像素没法被卷积核中心扫到)。
- 为了保持输出图像和输入图像尺寸一致(Same Padding),通常在使用
3*3卷积核时设 padding=1。 - 填
1代表在上下左右各补一圈像素。
6. dilation (空洞/膨胀系数)
- 含义:控制卷积核中元素点之间的间距。
- 默认值:1(标准卷积)。
- 通俗解释:
- 如果是 1,就是我们在课本上看到的紧密排列的卷积核。
- 如果是 2 或更大,卷积核的点之间会有空隙。这叫空洞卷积(Dilated Convolution)。它的作用是在不增加参数量的情况下,极大地扩大"感受野"(即卷积核能看到的范围)。
7. groups (分组卷积)
- 含义:控制输入和输出通道之间的连接方式。
- 默认值:1。
- 通俗解释:
- 1 (默认):标准的卷积,所有的输入通道都会参与计算每一个输出通道。
- >1:将输入和输出分成几组,组内独立卷积。
- 特殊用法:当 groups = in_channels 时,就是深度可分离卷积(Depthwise Convolution),常用于移动端模型(如 MobileNet),能大幅减少计算量。
8. bias (偏置)
- 含义:是否给输出结果加上一个可学习的偏置项(y=wx+b中的b)。
- 默认值:True。
- 通俗解释:通常都设为 True。但是,如果你在卷积层后面紧接着用 BatchNorm(批归一化层),那么这里应该设为 False,因为 BatchNorm 自身有偏置项,这里加了也是多余的。
9. padding_mode (填充模式)
- 含义:决定 padding 时边缘补充什么数值。
- 默认值:'zeros'。
- 选项:
- 'zeros':补 0(最常用,黑色边缘)。
- 'reflect':反射填充(像照镜子一样复制边缘像素)。
- 'replicate':复制填充(直接重复边缘像素)。
- 'circular':循环填充。
不同参数的动图如下
一个简单的示例代码
结果如下图:

神经网络-最大池化层的使用
最大池化(Max Pooling) 的主要作用是进行下采样(Downsampling),减小图像的尺寸,减少计算量,同时保留图像中最显著的特征(比如最亮的纹理)。
1. kernel_size (池化核大小)
- 含义:池化窗口的大小。
- 类型:整数(int)或元组(tuple)。
- 通俗解释:这就好比一个筛子。
- 常用值是 2,表示 的窗口。
- 在这个窗口内,它只选出一个最大值,扔掉其他 3 个值。这直接导致数据量减少。
2. stride (步长) —— 注意这里!
- 含义:窗口移动的步长。
- 默认值:kernel_size(这是它和 Conv2d 最大的区别!)。
- 通俗解释:
- 在 Conv2d 中,步长默认是 1(重叠移动)。
- 在 MaxPool2d 中,如果你的 kernel_size=2,那么 stride 默认也是 2。这意味着窗口是不重叠地移动的。
- 如果你想要重叠池化(Overlapping Pooling),你需要手动设置 stride 小于 kernel_size。
3. padding (填充)
- 含义:在边缘填充的值。
- 说明:图片中提到 "Implicit negative infinity padding"(隐式负无穷填充)。
- 通俗解释:
- 因为这是最大池化,我们要找最大值。如果我们填 0,而图像原本的数据全是负数(比如 -5, -3),填 0 就会错误地变成最大值。
- 所以,PyTorch 在内部逻辑上会把它视为填充了"负无穷大",这样填充的边缘永远不会被选中作为最大值,保证结果的真实性。
4. dilation (空洞/膨胀)
- 含义:控制窗口内元素的间距。
- 通俗解释:类似于空洞卷积。
- 通常我们在池化层很少用到这个参数,默认即可。
- 它的作用是让你在不增加计算量的情况下,在一个更大的范围内寻找最大值。
5. return_indices (返回索引) —— 很有用的参数
- 含义:布尔值。如果设为 True,函数不仅返回最大值本身,还会返回最大值所在的位置索引。
- 默认值:False。
- 用途:这是为了配合 MaxUnpool2d(最大反池化/上采样) 使用的。
- 场景:在做图像分割(如 SegNet)时,我们需要把缩小的图变回原样。为了恢复得比较准,我们需要知道之前缩小的时候,最大值是从哪个位置取出来的。这个参数就是用来记录这个"位置"的。
6. ceil_mode (天花板模式/向上取整)
- 含义:计算输出尺寸时,遇到除不尽的情况怎么办。
- 默认值:False(使用 floor,向下取整)。
- 通俗解释:
- 假设图像宽度是 5,池化核是 2,步长是 2。
- 5 / 2 = 2.5。
- ceil_mode=False (默认):向下取整,输出宽度为 2。这意味着最后边缘多出来的 1 列像素被直接扔掉了。
- ceil_mode=True:向上取整,输出宽度为 3。这意味着由于边缘还有数据,它会保留这部分(通常配合 padding 计算),不让边缘信息丢失。
非线性激活
非线性激活让深度网络能够表示复杂的非线性函数

线性层
Sequenial
按照下图所示的网络结构写一个练手代码



