Easy Deep Learning——池化层

news/2024/11/17 17:46:01/

池化是什么?它有什么作用?

还是草地的场景,把草地分成一块块的网格,数量还是太多了,如何继续简化输入数据呢?


这时候可以只取一块网格中所有的小草的大小形状的平均值或者最大值作为一个输入数据,这样就大大简化了数据数量。

池化(Pooling)是卷积神经网络中的一种常用操作,其目的是通过减小特征图的空间大小来降低模型的复杂度。在池化操作中,我们将特征图划分为多个子区域,然后对每个子区域进行聚合操作,生成一个较小的特征图。

通常,池化操作的聚合操作可以是取最大值(Max Pooling)、取平均值(Average Pooling)等,其中最大值池化是最常用的一种。

池化的作用有以下几点:

  1. 减小特征图的空间大小,降低模型复杂度,减少计算量。

  2. 增强模型对平移不变性的学习能力,即使目标在图像中稍微移动一点,也能保持对它的识别能力。

  3. 缓解过拟合,减少模型对噪声的敏感性,提高模型的泛化能力。

在实际应用中,池化操作通常会与卷积操作交替进行,以构建一个完整的卷积神经网络。同时,由于池化操作的缩小特征图的空间大小,因此在池化操作之前,可以通过增加卷积层的数量或通道数来提高模型的表达能力,从而保持对目标的识别能力。

Pytorch中常用的池化操作的函数

 

还是上一篇的例子,我们把每一个卷积核的结果进行最大值或平均值池化,可得到如下结果

 这样数据量明显减小。以下是python代码

import numpy as np
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
from PIL import Image# 读取图像并将其转换为灰度图
img = Image.open("/home/cbc/图片/2.png")
imgGray = np.array(img.convert("L"), dtype=np.float32)  # convert("L") 转换为单通道图片imh,imw = imgGray.shape
# 将二维的灰度图像转换成四维的张量,维度为(1, 1, imh, imw),表示一个batch,一个通道,高为imh,宽为imw
imgGray_torch = torch.from_numpy(imgGray.reshape((1,1,imh,imw)))
print(imgGray_torch.shape)
# 定义卷积核大小和卷积核矩阵,其中心为24,其余为-1
kersize = 5
ker = torch.ones(kersize, kersize, dtype=torch.float32) * -1
ker[2, 2] = 24
ker = ker.reshape((1, 1, kersize, kersize))# 将卷积核矩阵转换成张量,维度为(1, 1, kersize, kersize),表示一个batch,一个通道,卷积核的高和宽分别为kersize
ker = ker.reshape((1, 1, kersize, kersize))# 定义一个2D卷积层,输入通道数为1,输出通道数为2,卷积核的大小为(kersize,kersize),不使用偏置项
conv2d = nn.Conv2d(1, 2, (kersize, kersize), bias=False)# 将卷积核张量赋值给卷积层的权重,第一个通道的权重为ker
conv2d.weight.data[0] = ker# 对灰度图像进行卷积操作
imconv2dout = conv2d(imgGray_torch)
maxpoll2 = nn.MaxPool2d(2,stride=2)
pool2_out = maxpoll2(imconv2dout)# 将卷积和池化的结果的张量降维成二维数组
imconv2dout_im = pool2_out.data.squeeze()# 打印卷积结果的形状
print("卷积后的尺寸:", imconv2dout_im.shape)# 绘制卷积结果的两个通道
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.imshow(imconv2dout_im[0], cmap=plt.cm.gray)
plt.axis(False)
plt.subplot(1, 2, 2)
plt.imshow(imconv2dout_im[1], cmap=plt.cm.gray)
plt.axis(False)
plt.show()

 

 可以看出,由于池化后的输入数据量减少,图像也变得模糊了。


http://www.ppmy.cn/news/31533.html

相关文章

日读300篇文献的技巧

感觉自己看文章很慢,有时候也抓不住重点。 如果是英文文献的话,可能还要有点难度,毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候,发现了一个非常好玩的东西,大大提升了我看文章搞科研&#x…

Shell - crontab 定时 git 拉取并执行 maven 打包

目录 一.引言 二.踩坑与实践 1.原始代码 2.mvn package 未执行与解决 [导入环境变量] 3.git pull 未执行与解决 [添加绝对路径] 三.总结 一.引言 git 任务部署在通道机,每天6点需要定时更新 jar 包并打包上线,所以需要在 linux 服务器上&#xff…

腾讯云新用户怎么配置服务器的方法教程

腾讯云新用户怎么配置服务器?腾讯云服务器配置选择攻略,先选择云服务器地域和可用区,然后根据用户使用场景需要平衡型、计算型或高IO型等特性来选择云服务器CVM实例规格,主机教程网来详细说下腾讯云服务器配置选择攻略。 1、腾讯云…

K8s:通过 Kubeshark 体验 大白鲨(Wireshark)/TCPDump 监控 Kubernetes 集群

写在前面 分享一个 k8s 集群流量查看器很轻量的一个工具,监控方便博文内容涉及: Kubeshark 简单介绍Windows、Linux 下载运行监控DemoKubeshark 特性功能介绍 理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。…

数据结构刷题(二十二):90子集II、491递增子序列、46全排列

1.子集II题目链接思路:这是一道标准的组合问题数组排序去重。依然是使用回溯。注意:去重代码只需要判断同一树层上是否有重复,同组合总和II(https://blog.csdn.net/xiaomingming99/article/details/129396344)解法&…

JAVA进阶 —— Steam流

目录 一、 引言 二、 Stream流概述 三、Stream流的使用步骤 1. 获取Stream流 1.1 单列集合 1.2 双列集合 1.3 数组 1.4 零散数据 2. Stream流的中间方法 3. Stream流的终结方法 四、 练习 1. 数据过滤 2. 数据操作 - 按年龄筛选 3. 数据操作 - 演员信息要求…

大数据 | (一)Hadoop伪分布式安装

大数据原理与应用教材链接:大数据技术原理与应用电子课件-林子雨编著 Hadoop伪分布式安装借鉴文章:Hadoop伪分布式安装-比课本详细 大数据 | (二)SSH连接报错Permission denied:SSH连接报错Permission denied 哈喽&a…

【WPS文字-Word】WPS文字设置段落居中对齐后公式左边右边的文字仍然无法跟公式对齐,公式和文字对不齐

一、问题背景 原来的公式左边文字是底端,右边文字是居中,我想着让左右文字全跟公式居中对齐,就全部设置了段落居中对齐。 结果发现,公式左右边的文字依然无法居中对齐。左边的文字是居中,但是右边的文字变成了顶端对…