深度学习笔记(小白笔记)
- 池化的核心作用
池化(Pooling)一般用在卷积网络里,有 4 个核心作用:
(1)降维下采样:缩小特征图高、宽,减少参数量、加快计算
(2)特征浓缩:把一块区域的关键特征保留下来
(3)平移不变性:物体稍微偏移,不影响提取的特征
(4)抑制过拟合:减少冗余信息 - 三类常用的池化
(1)最大池化 MaxPool:取区域最大值,保留边缘、纹理特征
(2)平均池化 AvgPool:取区域平均值,保留整体、平滑特征
(3)自适应池化 AdaptivePool:不管输入多大,强制输出指定尺寸
importtorchimporttorch.nnasnn# 1. 造一个模拟特征张量# shape: [batch=1, channel=1, height=4, width=4]x=torch.tensor([[[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]]],dtype=torch.float32)print("原始张量 shape:",x.shape)#torch.Size([1, 1, 4, 4])print("原始张量:")print(x)#tensor([[[[ 1., 2., 3., 4.],[ 5., 6., 7., 8.], [ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])# 最大池化,2乘2窗口内的最大值max_pool=nn.MaxPool2d(kernel_size=2,stride=2)x_max=max_pool(x)print("shape:",x_max.shape)#torch.Size([1, 1, 2, 2])print(x_max)#tensor([[[[ 6., 8.],[14., 16.]]]])# 平均池化,2乘2窗口内的平均值avg_pool=nn.AvgPool2d(kernel_size=2,stride=2)x_avg=avg_pool(x)print("shape:",x_avg.shape)#torch.Size([1, 1, 2, 2])print(x_avg)#tensor([[[[ 3.5000, 5.5000],[11.5000, 13.5000]]]])# 自适应平均池化 输出固定 1×1adap_avg_pool=nn.AdaptiveAvgPool2d(output_size=1)x_adap=adap_avg_pool(x)print("shape:",x_adap.shape)#torch.Size([1, 1, 1, 1])print(x_adap)#tensor([[[[8.5000]]]])- 全连接
核心作用:维度变换、升维,把零散一维浮标点 “撑开” 成一张空白网格的大小
在进入全连接之前,我们手里拿到的往往是一串「一维离散点」:比如某个海域里只有 5 个浮标,每个浮标测到一个有效波高,拼起来就是一个长度为 5 的向量。而后续的卷积层需要的是「二维矩阵」形式的输入(高度 × 宽度),两者形状对不上,中间就必须靠全连接层来做一次「形状翻译」。
具体做法是:把长度为 N 的一维向量,通过一个Linear(N, H*W)的线性层,映射成 H×W 个数值,再reshape成 H×W 的二维矩阵。这样原本零散分布的浮标点,就被「撑开」铺满了一整张网格,每个网格点都对应一个由所有浮标共同决定的数值。
例子:输入只有少数几个浮标的有效波高,输出一张二维海浪空间分布图
importtorchimporttorch.nnasnn# 假设海域网格是 8×8,共 64 个格点H,W=8,8# 只有 5 个浮标,测得 5 个有效波高buoys=torch.randn(1,5)# shape: [batch=1, 浮标数=5]# 全连接升维:5 -> 64fc=nn.Linear(5,H*W)grid=fc(buoys)# shape: [1, 64]grid=grid.reshape(1,1,H,W)# shape: [1, 1, 8, 8]print(grid.shape)# torch.Size([1, 1, 8, 8])优点:可以把任意长度一维离散点,变成二维矩阵,解决「浮标是离散点,不能直接进卷积」的难题。无论浮标是 3 个、5 个还是 20 个,只要调整Linear的输入维度,都能统一映射到同一张网格上,后续卷积层的接口就固定下来了。
缺点:没有空间局部感知,不会利用 “相邻海域海浪高度是渐变” 这个常识,单独用全连接重建出来的空间场效果很差。因为全连接层对每个输出格点都独立地连接了全部输入浮标,它并不知道「左上角」和「右下角」在空间上是远是近,也无法表达「离某个浮标越近、波高越接近该浮标读数」这种先验。结果就是重建出的空间场容易出现不自然的跳变和噪点,看起来不像真实的海浪分布。
也正因为如此,全连接在这里只承担「升维 + 变形」的过渡角色,真正负责把空间结构补回来的,是后面的卷积层。
- 卷积层
核心作用:提取空间局部特征,学习空间相邻关系,把粗糙画布打磨成合理的海浪场,学习海浪空间平滑、空间分布规律,修复空间纹理, 输出高质量二维网格化有效波高场