• 深度学习——池化层笔记+代码


    1.对于卷积层来说,卷积对位置比降敏感

    ①检测垂直边缘

    使用K=[-1,1] 的卷积核进行卷积操作,实现垂直边缘信息的检测

    如果因为抖动曝光啥的同一个物体,1像素可能往右移位了。K的卷积核就得不到相应位置的边缘信息。

     ②需要一定程度的平移不变性,即使1像素边缘位置移动了,卷积后池化就可以检测到未移动的边缘。池化层就可以

    2.二维最大池化

    ①返回滑动窗口的最大值

    ②垂直边缘检测

    经过卷积层k=[1,-1]

    说明第二列是从黑到白的边缘。

    【个人猜】如果输入图像的时候不小心抖动。1像素偏移

     经过卷积层k=[1,-1]

    输出边缘信息变了。

    但经过2*2最大池化层:

    能检测到边缘信息

     3.填充,步幅,多个通道

    ①池化层和卷积层类似都有填充和步幅

    ②没有可学习的参数

    ③输出通道数=输入通道数(卷积层的输出通道数是1)

    4.池化层有哪些?

    ①最大池化层:每个窗口中最强的模式信号

    ②平均池化层:每个窗口中的平均值

    【总结】

    ①池化层返回窗口最大或平均

    ②缓解卷积层对位置的敏感性

    ③有窗口大小,填充,步幅超参数。

    ④输出通道=输入通道。输入通道有几层,输出几层。

    ⑤默认值步幅跟池化窗口的大小相同


    对应的代码:

    1.池化层 窗口最大 或 平均

    1. import torch
    2. from torch import nn
    3. from d2l import torch as d2l
    4. def pool2d(X, pool_size, mode='max'):
    5. p_h, p_w = pool_size
    6. Y = torch.zeros((X.shape[0] - p_h + 1, X.shape[1] - p_w + 1))
    7. for i in range(Y.shape[0]):
    8. for j in range(Y.shape[1]):
    9. if mode == 'max':
    10. Y[i, j] = X[i:i + p_h, j:j + p_w].max()
    11. elif mode == 'avg':
    12. Y[i, j] = X[i:i + p_h, j:j + p_w].mean()
    13. return Y

     2.验证 平均

    1. X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]], dtype=torch.float32)
    2. print(pool2d(X, (2, 2), 'avg'))

     输出:

    tensor([[2., 3.],
            [5., 6.]])

     3.填充和步幅

    1. X = torch.arange(16, dtype=torch.float32).reshape((1, 1, 4, 4))
    2. print(X)
    3. '''
    4. tensor([[[[ 0., 1., 2., 3.],
    5. [ 4., 5., 6., 7.],
    6. [ 8., 9., 10., 11.],
    7. [12., 13., 14., 15.]]]])
    8. '''

     4.步幅跟池化窗口相同

    1. pool2d = nn.MaxPool2d(3)
    2. print(pool2d(X))
    3. '''
    4. tensor([[[[10.]]]])
    5. '''

    5. 填充和步幅手动设定

    1. pool2d = nn.MaxPool2d((2, 3), padding=(1, 1), stride=(2, 3))
    2. print(pool2d(X))
    3. '''
    4. tensor([[[[ 1., 3.],
    5. [ 9., 11.],
    6. [13., 15.]]]])
    7. '''

    6.池化层在每个通道上单独运算

    1. X = torch.cat((X, X + 1), 1)
    2. print(X)
    3. '''
    4. tensor([[[[ 0., 1., 2., 3.],
    5. [ 4., 5., 6., 7.],
    6. [ 8., 9., 10., 11.],
    7. [12., 13., 14., 15.]],
    8. [[ 1., 2., 3., 4.],
    9. [ 5., 6., 7., 8.],
    10. [ 9., 10., 11., 12.],
    11. [13., 14., 15., 16.]]]])
    12. '''
    13. pool2d = nn.MaxPool2d(3, padding=1, stride=2)
    14. print(pool2d(X))
    15. '''
    16. tensor([[[[ 5., 7.],
    17. [13., 15.]],
    18. [[ 6., 8.],
    19. [14., 16.]]]])
    20. '''

  • 相关阅读:
    VXLAN间通信
    SpringCloud (六) ——Gateway服务网关
    JAVA毕业设计BS架构考研交流学习平台设计与实现计算机源码+lw文档+系统+调试部署+数据库
    TeXLive 2023安装教程
    【React 报错】—Remove untracked files, stash or commit any changes, and try again.
    简单阐述函数
    Android 10.0 Launcher3 抽屉式(双层)app列表排序
    百度智能业务部java实习一面
    Intel® 64 and IA-32 Architectures Software Developer’s Manual 读后感
    AI+边缘计算,让城市治理难题“看得见”又“管得了”
  • 原文地址:https://blog.csdn.net/jbkjhji/article/details/128112470