池化层(最大、平均)

1、卷积层对位置非常敏感,使用卷积层时,可能一个地方的轻微变动都会使结果发生变化,我们希望不要这么敏感,就有了池化层(更加柔和)。

2、二维最大池化:返回滑动窗口中的最大值,每个窗口中最强的模式信号

3、填充、步幅、多个通道

(1)对于CNN卷积核可学习是指,卷积核的数值不是预先固定的,而是在训练过程中通过反向传播算法自动调整和优化的。

(步骤:1. 初始化:卷积核的初始值通常是随机生成的。
              2. 前向传播:在每一次前向传播中,卷积核对输入数据进行卷积操作,生成特征图。
              3. 损失计算:通过与真实标签对比,计算损失函数的值。
              4. 反向传播:根据损失函数,通过反向传播算法计算梯度。卷积核的数值会根据梯度信息进行更新,以使得损失函数的值逐渐减小。
              5. 参数更新:使用优化算法(如梯度下降法),调整卷积核的值。)

4、平均池化层:将最大池化层中的“最大”操作替换为“平均”

5、总结

(1)池化层返回窗口中最大或平均值

(2)缓解卷积层会位置的敏感性

(3)同样有窗口大小、填充、和步幅作为超参数

(4)池化层通常作用在卷积层的最后

6、代码

import torch
from torch import nn
from d2l import torch as d2l

def pool2d(X, pool_size, mode='max'):
    p_h, p_w = pool_size
    Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            if mode == 'max':
                Y[i, j] = X[i: i + p_h, j: j + p_w].max()
            elif mode == 'avg':
                Y[i, j] = X[i: i + p_h, j: j + p_w].mean()
    return Y

(1)填充和步幅(跟卷积一样)

X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
pool2d = nn.MaxPool2d((2, 3), stride=(2, 3), padding=(0, 1))
pool2d(X)

(2)多个通道

#前面定义的x已经是4维了,再stack就变成5维,而cat不改变维度
X = torch.cat((X, X + 1), 1)
X

1 ==> X.shape: torch.Size([1, 2, 4, 4]);

0 ==> X.shape: torch.Size([2, 1, 4, 4])

上一篇:element ui中的scss语法理解


下一篇:使用附加属性 实现wpf中的passwordBox 的明文/密文密码切换