文章目录

  • MaxPool2d最大池化
  • AvgPool2d平均池化
  • AdaptiveAvgPool2d自适应平均池化

池化操作的一个重要的目的就是对卷积后得到的特征进行进一步处理,池化层可以起到对数据进一步浓缩的效果,从而缓解计算时内存的压力。
在pytoch中提供很多池化的类,这里主要介绍最**大池化(MaxPool)、平均池化(AvgPool)、自适应池化(AdaptiveAvgpool)**的区别,,其他方法类似。

对于torch.nn.MaxPool2d()池化操作相关参数的应用,其使用方法如下所示

torch.nn.MaxPool2d(kernel_size,stride=None,padding=0,dilation=1,return_indices=False,ceil_mode=False)

参数使用说明:
kernel_size:(整数或者数组)最大池化的窗口大小;
stride:(整数或数组,正数)最大值池化窗口移动的步长,默认值是kernel_size
padding:(整数或数据、正数)输入的每一条边补充0的层数
dilation:(整数或数组、正数)一个控制窗口中元素步幅的参数
return_indices:如果为True,则会返回输出最大值的索引,这样会更加便于后面的torch.nn.MaxUnpool2d操作
ceil_mode:如果等于True,计算输出信号的大小时候,会使用向上取整,默认向下取整。
测试图片见下图

MaxPool2d最大池化

对卷积后的结果进行最大池化

maxpool2 = nn.MaxPool2d(2,stride=2)
pool2_out = maxpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
print('pool2_out.shape')

对原始图片2160 * 3840进行特征映射在经过窗口为22,步长为2的最大池化后,尺寸变成10781918的特征映射。将两个特征映射进行可视化

plt.figure(figsize = (12,6))
plt.subplot(1,2,1)
plt.imshow(pool2_out_im[0].data,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(pool2_out_im[1].data,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

最大池化的结果图像

完整代码见下图所示

import numpy as npimport torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Imagemyim = Image.open("C:\\Users\\qiang\\Desktop\\Python语言\\lol英雄联盟琴瑟仙女 水晶玫瑰 娑娜4k壁纸3840x2160_彼岸图网.jpg")
myimgray=np.array(myim.convert("L"),dtype=np.float32)
# plt.figure(figsize=(6,6))
# plt.imshow(myimgray,cmap=plt.cm.gray)
# plt.axis("off")
# plt.show()imh, imw = myimgray.shape
myimgray_t = torch.from_numpy(myimgray.reshape((1,1,imh,imw)))
print(myimgray_t.shape)
kersize = 5
ker = torch.ones(kersize,kersize,dtype=torch.float32)*-1
print(ker)
ker[2,2] = 24
print(ker)
ker = ker.reshape((1,1,kersize,kersize))
print(ker)
conv2d = nn.Conv2d(1,2,(kersize, kersize),bias=False)
conv2d.weight.data[0] = ker
imconv2dout= conv2d(myimgray_t)
imconv2dout_im = imconv2dout.data.squeeze()
print("卷积后尺寸:",imconv2dout_im.shape)maxpool2 = nn.MaxPool2d(2,stride=2)
pool2_out = maxpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
print('pool2_out.shape')plt.figure(figsize = (12,6))
plt.subplot(1,2,1)
plt.imshow(pool2_out_im[0].data,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(pool2_out_im[1].data,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

AvgPool2d平均池化

对卷积后的输出结果进行平均池化,并进行可视化操作

avgpool2 = nn.AvgPool2d(2,stride=2)
pool2_out = avgpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
print(pool2_out.shape)
plt.figure(figsize = (12,6))
plt.subplot(1,2,1)
plt.imshow(pool2_out_im[0].data,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(pool2_out_im[1].data,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

得到的可视化图片如下所示

AdaptiveAvgPool2d自适应平均池化

AdaAvgpool2 = nn.AdaptiveAvgPool2d(output_size=(100,100))
pool2_out = AdaAvgpool2(imconv2dout)
pool2_out_im = pool2_out.squeeze()
print(pool2_out.shape)plt.figure(figsize = (12,6))
plt.subplot(1,2,1)
plt.imshow(pool2_out_im[0].data,cmap=plt.cm.gray)
plt.axis("off")
plt.subplot(1,2,2)
plt.imshow(pool2_out_im[1].data,cmap=plt.cm.gray)
plt.axis("off")
plt.show()

可视化图像如同所示

池化层:最大池化MaxPool、平均池化AvgPool、自适应池化AdaptiveMaxPool区别--基于pytorch框架相关推荐

  1. cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  2. (pytorch-深度学习系列)CNN中的池化层-学习笔记

    CNN中的池化层 首先,池化(pooling)层的提出是为了缓解卷积层对位置的过度敏感性. 什么意思? 比如在图像边缘检测问题中,实际图像里,我们的目标物体不会总出现在固定位置,即使我们连续拍摄同一个 ...

  3. 池化层(pooling layer)

    来源:Coursera吴恩达深度学习课程 除了卷积层,卷积网络也经常使用池化层(pooling layer)来缩减模型的大小(reduce the size of their representati ...

  4. 卷积神经网络中卷积层、池化层、全连接层的作用

    1. 卷积层的作用 卷积层的作用是提取输入图片中的信息,这些信息被称为图像特征,这些特征是由图像中的每个像素通过组合或者独立的方式所体现,比如图片的纹理特征,颜色特征. 比如下面这张图片,蓝色框框住的 ...

  5. 39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道

    1.34.PyTorch Down/up sample (pytorch上下采样) 1.34.1. 首先介绍下采样 1.34.1.1. MaxPool2d案例 1.34.1.2. AvgPool2d案 ...

  6. GAP(全局平均池化层)操作

    转载的文章链接: 为什么使用全局平均池化层? 关于 global average pooling https://blog.csdn.net/qq_23304241/article/details/8 ...

  7. 最大池化层和平均池化层

    参考链接: https://blog.csdn.net/junmuzi/article/details/53206600 https://blog.csdn.net/qq_21190081/artic ...

  8. python实现卷积_【python实现卷积神经网络】池化层实现

    激活函数的实现(sigmoid.softmax.tanh.relu.leakyrelu.elu.selu.softplus):https://www.cnblogs.com/xiximayou/p/1 ...

  9. pytorch学习笔记七:nn网络层——池化层、线性层

    一.池化层 池化运算:对信号进行"收集" 并"总结",类似于水池收集水资源,因而得名池化层. 收集:由多变少,图像的尺寸由大变小 总结:最大值/平均值 下面是最 ...

最新文章

  1. 使用maven+eclipse搭建最简单的struts2的HelloWorld
  2. linux 命令 —-— vi编辑器
  3. 7-20上午刷题未知点集合
  4. python isupper需要调包吗_密码强度等级
  5. WordPress百度快速提交插件-加速百度爬虫和收录
  6. Xcode7 出现-fembed-bitcode错误的解决办法
  7. 无人机小区上空盘一圈测体温,背后技术靠谱吗?
  8. w3school和w3cschool两个网站有什么关系和区别?
  9. file_contexts 踩坑
  10. JavaEE项目 Web聊天室(JSP实现)
  11. 《C陷阱与缺陷》学习笔记(1):这本书值得看吗?
  12. 计算机组成基础(2)-- 微体系结构层
  13. Eclipse中如何clean项目以及clean的作用
  14. 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
  15. 小程序视频旋转的相关问题
  16. 今日头条阅读量怎么刷_今日头条推广 今日头条阅读量怎么刷
  17. comsol移动网格_[转载]COMSOL动网格调试
  18. 张五常先生谈读书和思考的方法
  19. Linux操作系统应用实例_Discuz安装
  20. java生成PDF,各种格式、样式、水印都有

热门文章

  1. 如何用html构建ios应用,使用HTML5构建iOS原生APP
  2. 晋级赛关键一场遇到服务器中途维护,第四届全球争霸赛-大区赛常见问题说明...
  3. beatsx白灯闪三下开不了机_beats X耳机不开机维修,beatsx耳机闪白灯是什么问题...
  4. 福建信息技术学院计算机系男生宿舍怎么样,广西职业技术学院宿舍怎么样
  5. ldap seach java_从LDAP(Java)检索信息
  6. android listadepter 释放资源,SimpleAdepter浅谈
  7. php declare 作用,php declare用法详解
  8. ios kb转m_iOS 音频录音和格式转换
  9. mysql半同步降级_MySQL半同步复制
  10. java. 端序_c代码测试本机处理器的端序