Pytorch深度學習框架實戰教程-番外篇02-Pytorch池化層概念定義、工作原理和作用

?相關文章 + 視頻教程

《Pytorch深度學習框架實戰教程01》《視頻教程

Pytorch深度學習框架實戰教程02:開發環境部署》《視頻教程

Pytorch深度學習框架實戰教程03:Tensor 的創建、屬性、操作與轉換詳解》《視頻教程

《Pytorch深度學習框架實戰教程04:Pytorch數據集和數據導入器》《視頻教程

《Pytorch深度學習框架實戰教程05:Pytorch構建神經網絡模型》《視頻教程

《Pytorch深度學習框架實戰教程06:Pytorch模型訓練和評估》《視頻教程

Pytorch深度學習框架實戰教程09:模型的保存和加載》《視頻教程》

《Pytorch深度學習框架實戰教程10:模型推理和測試》《視頻教程》

Pytorch深度學習框架實戰教程-番外篇01-卷積神經網絡概念定義、工作原理和作用

Pytorch深度學習框架實戰教程-番外篇02-Pytorch池化層概念定義、工作原理和作用

Pytorch深度學習框架實戰教程-番外篇03-什么是激活函數,激活函數的作用和常用激活函數

PyTorch 深度學習框架實戰教程-番外篇04:卷積層詳解與實戰指南

Pytorch深度學習框架實戰教程-番外篇05-Pytorch全連接層概念定義、工作原理和作用

Pytorch深度學習框架實戰教程-番外篇06:Pytorch損失函數原理、類型和案例

Pytorch深度學習框架實戰教程-番外篇10-PyTorch中的nn.Linear詳解

一、什么是池化層?

池化層(Pooling Layer)是卷積神經網絡(CNN)中與卷積層配合使用的重要組件,主要用于特征降維、減少計算量并增強模型的平移不變性。它通常緊跟在卷積層之后,對卷積層輸出的特征圖進行壓縮處理。

與卷積層不同,池化層沒有可學習的參數,其操作是確定性的(根據預設規則對局部區域進行聚合計算)。

二、池化層的工作原理

池化層的工作流程與卷積層類似,都通過滑動窗口處理特征圖,但計算方式不同:

  1. 滑動窗口:池化窗口(如 2×2)在特征圖上按指定步長滑動。
  2. 聚合計算:對窗口覆蓋的區域執行聚合操作(如取最大值、平均值等),得到一個值作為輸出特征圖的對應位置像素。
  3. 輸出特征圖:所有窗口的聚合結果構成尺寸更小的輸出特征圖。

三、常見池化方式圖示

池化層的作用

  1. 特征降維:通過減少特征圖的空間尺寸(如 2×2 池化 + 步長 2 可將尺寸減半),降低后續層的計算量和參數數量。
  2. 增強平移不變性:局部微小位移不會改變池化結果(如最大值位置輕微移動不影響輸出),提高模型對輸入變化的魯棒性。
  3. 防止過擬合:通過信息聚合減少特征冗余,降低模型對局部細節的過度敏感。
  4. 擴大感受野:池化操作使高層神經元能感知到輸入圖像更大范圍的區域。

四、PyTorch 中的池化層詳解

PyTorch 的torch.nn模塊提供了多種池化層,適用于不同場景:

池化層作用適用場景
nn.MaxPool2d取窗口內最大值保留顯著特征(如邊緣、紋理)
nn.AvgPool2d取窗口內平均值保留整體特征,平滑輸出
nn.MaxUnpool2d最大池化的逆操作(上采樣)特征圖恢復
nn.LPPool2d取窗口內 p 次冪的平均值的 p 次方根靈活控制聚合強度
nn.AdaptiveMaxPool2d自適應最大池化(指定輸出尺寸)固定輸出尺寸,簡化網絡設計
nn.AdaptiveAvgPool2d自適應平均池化(指定輸出尺寸)同上
nn.MaxPool2d核心參數(最常用)

python

運行

nn.MaxPool2d(kernel_size,    # 池化窗口大小(int或tuple)stride=None,    # 步長(默認與kernel_size相同)padding=0,      # 填充大小dilation=1,     # 窗口元素間隔(用于空洞池化)return_indices=False,  # 是否返回最大值的索引(用于Unpool)ceil_mode=False  # 是否使用向上取整計算輸出尺寸(默認向下取整)
)

輸出尺寸計算公式
H_out = floor((H + 2×padding - dilation×(kernel_size-1) - 1) / stride + 1)
(與卷積層相同,ceil_mode=True時用ceil替代floor

五、示例程序:PyTorch 池化層實戰

以下示例展示不同池化層的效果,包括:

  1. 標準池化(MaxPool2d、AvgPool2d)
  2. 自適應池化(AdaptiveMaxPool2d)
  3. 池化對特征圖的影響可視化
import torch
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from torchvision import transforms# 1. 數據準備:加載圖片并生成特征圖(模擬卷積層輸出)
def prepare_feature_maps():# 加載圖片并轉為單通道灰度圖transform = transforms.Compose([transforms.Resize((128, 128)),transforms.Grayscale(),  # 轉為單通道transforms.ToTensor()])# 使用示例圖片(實際運行時替換為你的圖片路徑)image = Image.open("example.jpg")image_tensor = transform(image).unsqueeze(0)  # 形狀:[1, 1, 128, 128]# 模擬卷積層輸出:創建4個特征圖(實際中來自卷積層)# 這里通過簡單變換生成不同特征圖以展示效果feature_maps = []for i in range(4):# 對原圖進行簡單變換生成不同特征圖if i == 0:fm = image_tensor * (i+1)elif i == 1:fm = torch.roll(image_tensor, shifts=5, dims=2)  # 水平偏移elif i == 2:fm = torch.roll(image_tensor, shifts=5, dims=3)  # 垂直偏移else:fm = image_tensor * 0.5 + torch.roll(image_tensor, shifts=3, dims=(2,3)) * 0.5feature_maps.append(fm)# 合并為[1, 4, 128, 128](批次=1,通道=4,高=128,寬=128)return torch.cat(feature_maps, dim=1), image# 2. 定義池化層模型
class PoolingDemo(nn.Module):def __init__(self):super(PoolingDemo, self).__init__()# 2×2最大池化,步長2(默認與kernel_size相同)self.max_pool = nn.MaxPool2d(kernel_size=2, stride=2)# 3×3平均池化,步長2,填充1self.avg_pool = nn.AvgPool2d(kernel_size=3, stride=2, padding=1)# 自適應最大池化,固定輸出尺寸為(32, 32)self.adaptive_max_pool = nn.AdaptiveMaxPool2d(output_size=(32, 32))def forward(self, x):max_out = self.max_pool(x)avg_out = self.avg_pool(x)adaptive_max_out = self.adaptive_max_pool(x)return max_out, avg_out, adaptive_max_out# 3. 可視化函數
def visualize_pooling效果(original_img, input_fm, max_out, avg_out, adaptive_out):plt.figure(figsize=(16, 14))# 顯示原始圖片plt.subplot(5, 1, 1)plt.title("Original Image")plt.imshow(original_img, cmap='gray')plt.axis('off')# 顯示輸入特征圖(4個通道)plt.subplot(5, 1, 2)plt.title("Input Feature Maps (4 channels)")input_grid = np.zeros((128, 128*4))for i in range(4):fm = input_fm[0, i].detach().numpy()  # 取第一個樣本的第i個通道input_grid[:, i*128:(i+1)*128] = fmplt.imshow(input_grid, cmap='gray')plt.axis('off')plt.text(-20, 64, f"Size: {input_fm.shape[2:]}", va='center', rotation=90)# 顯示最大池化結果plt.subplot(5, 1, 3)plt.title("Max Pooling (2×2, stride=2) Output")max_grid = np.zeros((64, 64*4))  # 尺寸減半為64×64for i in range(4):fm = max_out[0, i].detach().numpy()max_grid[:, i*64:(i+1)*64] = fmplt.imshow(max_grid, cmap='gray')plt.axis('off')plt.text(-20, 32, f"Size: {max_out.shape[2:]}", va='center', rotation=90)# 顯示平均池化結果plt.subplot(5, 1, 4)plt.title("Average Pooling (3×3, stride=2, padding=1) Output")avg_grid = np.zeros((64, 64*4))  # 尺寸約為64×64for i in range(4):fm = avg_out[0, i].detach().numpy()avg_grid[:, i*64:(i+1)*64] = fmplt.imshow(avg_grid, cmap='gray')plt.axis('off')plt.text(-20, 32, f"Size: {avg_out.shape[2:]}", va='center', rotation=90)# 顯示自適應池化結果plt.subplot(5, 1, 5)plt.title("Adaptive Max Pooling (output 32×32) Output")adaptive_grid = np.zeros((32, 32*4))  # 固定尺寸32×32for i in range(4):fm = adaptive_out[0, i].detach().numpy()adaptive_grid[:, i*32:(i+1)*32] = fmplt.imshow(adaptive_grid, cmap='gray')plt.axis('off')plt.text(-20, 16, f"Size: {adaptive_out.shape[2:]}", va='center', rotation=90)plt.tight_layout()plt.show()# 4. 主函數
if __name__ == "__main__":# 準備特征圖和原始圖片feature_maps, original_img = prepare_feature_maps()print(f"輸入特征圖形狀: {feature_maps.shape}")  # [1, 4, 128, 128]# 初始化模型并執行池化操作model = PoolingDemo()max_pool_out, avg_pool_out, adaptive_pool_out = model(feature_maps)# 打印各池化層輸出形狀print(f"最大池化輸出形狀: {max_pool_out.shape}")       # [1, 4, 64, 64]print(f"平均池化輸出形狀: {avg_pool_out.shape}")       # [1, 4, 64, 64]print(f"自適應池化輸出形狀: {adaptive_pool_out.shape}") # [1, 4, 32, 32]# 可視化池化效果visualize_pooling效果(original_img=original_img,input_fm=feature_maps,max_out=max_pool_out,avg_out=avg_pool_out,adaptive_out=adaptive_pool_out)

代碼說明

  1. 數據準備:通過加載圖片并生成 4 個特征圖(模擬卷積層輸出),特征圖通過簡單變換(偏移、混合)模擬不同卷積核提取的特征。

  2. 池化層定義

    • MaxPool2d(2, 2):2×2 窗口,步長 2,輸出尺寸為輸入的 1/2(128→64)。
    • AvgPool2d(3, 2, 1):3×3 窗口,步長 2,填充 1,輸出尺寸接近輸入的 1/2。
    • AdaptiveMaxPool2d(32, 32):無論輸入尺寸如何,輸出固定為 32×32,簡化網絡設計。
  3. 可視化結果

    • 最大池化輸出更銳利,保留局部顯著特征(如邊緣)。
    • 平均池化輸出更平滑,保留整體區域信息。
    • 自適應池化嚴格保證輸出尺寸,便于多層網絡拼接。

關鍵結論

  • 池化層通過聚合局部特征實現降維,是 CNN 中控制計算復雜度的關鍵。
  • 最大池化更適合保留銳利特征,平均池化更適合平滑特征。
  • 自適應池化(Adaptive*Pool)通過指定輸出尺寸簡化網絡設計,在遷移學習和固定尺寸輸出場景中廣泛使用。
  • 池化層通常緊跟卷積層,形成 "卷積 + 池化" 的經典組合,逐步提取高層特征。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92932.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92932.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92932.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見通信協議詳解:TCP、UDP、HTTP/HTTPS、WebSocket 與 GRPC

常見通信協議詳解:TCP、UDP、HTTP/HTTPS、WebSocket 與 RPC 在現代網絡通信中,各種協議扮演著至關重要的角色,它們決定了數據如何在網絡中傳輸、控制其可靠性、實時性與適用場景。對于開發者而言,理解這些常見的通信協議&#xff…

部署一個自己的音樂播放器教程

以下以部署 YesPlayMusic 為例,介紹兩種常見的部署方法,一種是通過 Node.js 和 Git 在 Windows 系統上部署,另一種是通過 Docker 在 Linux 系統上部署。具體步驟如下:Windows 系統部署(基于 Node.js 和 Git&#xff09…

FFMPEG將H264轉HEVC時,碼率縮小多少好,以及如何通過SSIM(Structural Similarity Index結構相似性指數)衡量轉碼損失

最近整理一些視頻,我發現太多了,就想把一些本來就需要轉碼的視頻縮小一下。因為轉碼的時候為了彌補損失,我將碼率增大了 10-20%,但是如果將 H264 轉 HEVC(當然也可以是其他格式),那么或許不用增…

前端,route路由

路由定義與導航動態路由匹配&#xff1a;參數傳遞&#xff08;/user/:id&#xff09;嵌套路由配置與 <router-view> 層級渲染編程式導航&#xff1a;router.push、router.replace 和 router.go路由守衛與權限控制全局守衛&#xff1a;beforeEach、beforeResolve、afterEa…

Kubernetes網絡原理深度解析

Kubernetes網絡原理深度解析 1 Kubernetes網絡模型 Kubernetes 網絡模型是其實現容器化應用高效通信的基礎框架。它致力于解決容器編排環境中復雜的網絡連通性、服務發現與負載均衡等問題&#xff0c;追求讓容器、Pod 等網絡端點像傳統主機網絡一樣簡潔、可預測地通信 。其核心…

Python3.10 + Firecrawl 下載 Markdown 文檔:構建高效通用文章爬蟲

在信息爆炸的時代&#xff0c;從各種網站收集和整理文章內容已成為許多開發者和研究人員的常見需求。無論是為了內容聚合、數據分析還是知識管理&#xff0c;一個高效、穩定的通用文章爬蟲都是不可或缺的工具。 本文將詳細介紹如何使用 Python 3.10 結合 Firecrawl API 構建一個…

國產3D大型裝配設計新突破②:裝配約束智能推斷 | 中望3D 2026

本文為CAD芯智庫整理&#xff0c;未經允許請勿復制、轉載&#xff01;→ www.xwzsoft.com/h-nd-605.html中望3D2026亮點速遞之【裝配篇】已經介紹了設計效率的提升&#xff0c;今天將分享的是中望3D2026【裝配約束智能推斷】&#xff0c;也預告一下第三篇是講解【組件復用效率提…

深入淺出設計模式——行為型模式之觀察者模式 Observer

文章目錄1.觀察者模式簡介2.觀察者模式結構3.觀察者模式代碼實例3.0.公共頭文件3.1.觀察者3.1.1.抽象觀察者Observer3.1.2.具體觀察者Player3.2.目標類3.2.1.抽象目標AllyCenter3.2.2.具體目標AllyCenterController循環包含錯誤示例“前向聲明什么時候不夠、必須 #include 對方…

CA證書、SSL加速器、HTTPS、HTTP和域名之間的關系

理解CA證書、SSL加速器、HTTPS、HTTP和域名之間的關系對于構建安全、高效的網站至關重要。它們共同構成了現代安全網絡通信的基礎。下面是它們各自的概念以及它們之間的關系&#xff1a;域名 概念&#xff1a; 人類可讀的網站地址&#xff08;如 www.example.com&#xff09;。…

3D感知多模態(圖像、雷達感知)

一.BEVFusion1.簡要介紹BEV是一個俯視空間&#xff0c;Fusion做的就是融合&#xff0c;這里指的就是圖像和點云的融合。那如何把圖像和點云融合在一起&#xff1f;認為融合方法有三種&#xff1a;a.point level fusion:點集的融合&#xff0c;從點云中采樣一些點,再根據相機的內…

STM32 HAL庫驅動W25QXX Flash

STM32 HAL庫驅動W25QXX Flash 1. 概述 W25QXX系列是一種SPI接口的Flash存儲器&#xff0c;廣泛應用于嵌入式系統中作為數據存儲設備。本文檔詳細介紹了基于STM32 HAL庫的W25QXX Flash驅動實現&#xff0c;包括硬件連接、驅動函數實現以及使用示例。 項目源碼倉庫&#xff1a…

Vivado自定義IP核學習筆記

文章目錄【1】創建一個新的IP核【2】實現功能【3】編輯IP核【4】IP封裝【5】創建Vivado工程【1】創建一個新的IP核 1.1 打開Vivado->點擊【Tasks->Manage IP->New IP Location】->彈出窗口1.2 【Next】->設置IP屬性->【Finish】->【OK】 【IP Location】…

【面試】高級開發面試場景題

1、如何保證MySql到ES的數據一致性? 答:ES是一個開元分布式搜索和分析引擎、它提供了全文搜索、結構化搜索分析以及這些組合的能力。 全文搜索能力:ES支持復雜的搜索能力,包括模糊匹配、短語查詢、布爾查詢等,并且可以快速的返回結果 實時數據分析:實時數據分析,支持對…

《 慢 SQL 分析與 SQL 優化實戰指南》

&#x1f50d; 慢 SQL 分析與 SQL 優化實戰指南、 &#x1f9e0;前言 在數據庫性能調優中&#xff0c;慢 SQL 是性能瓶頸的常見元兇。 一次慢查詢可能會拖垮整個業務線程池&#xff0c;甚至引發鎖等待、雪崩效應。 對后端開發與 DBA 而言&#xff0c;快速定位并優化慢 SQL&am…

C#中如何運用JWT用戶認證

一、JWT概述JSON Web Token&#xff08;JWT&#xff09;是一種輕量級的身份認證機制&#xff0c;廣泛應用于分布式系統中的用戶認證。它通過緊湊的JSON格式存儲用戶身份信息&#xff0c;并使用數字簽名確保信息的完整性和真實性。與傳統的基于Session的認證相比&#xff0c;JWT…

Hibernate 使用詳解

在現代的Java開發中&#xff0c;數據持久化是一個至關重要的環節。而在眾多持久化框架中&#xff0c;Hibernate以其強大的功能和靈活性&#xff0c;成為了開發者們的首選工具。本文將詳細介紹Hibernate的原理、實現過程以及其使用方法&#xff0c;希望能為廣大開發者提供一些有…

【圖像算法 - 13】基于 YOLO12 與 OpenCV 的實時目標點擊跟蹤系統(系統介紹 + 源碼詳細)

基于 YOLO12 與 OpenCV 的實時點擊目標跟蹤系統 在計算機視覺領域&#xff0c;目標檢測與跟蹤是兩個核心任務。本文將介紹一個結合 YOLO 目標檢測模型與 OpenCV 跟蹤算法的實時目標跟蹤系統&#xff0c;該系統允許用戶通過鼠標交互選擇特定目標進行持續跟蹤&#xff0c;支持多…

【數據庫】 MySQL 表的操作詳解

在 MySQL 數據庫的日常開發與維護中&#xff0c;表的操作是最基礎且最常用的部分。本文將從 創建表、查看表結構、修改表 以及 刪除表 等方面進行詳細講解&#xff0c;并附上對應的 SQL 語句示例&#xff0c;方便在實際項目中直接應用。一、創建表 1.1 創建表語法 CREATE TABLE…

DiT: Transformer上的擴散模型

論文&#xff08;ICCV 2023&#xff09;&#xff1a;Scalable Diffusion Models with Transformers 代碼和工程網頁&#xff1a;https://www.wpeebles.com/DiT.html DiTs&#xff08;Diffusion Transformers&#xff09;是首個基于Transformer架構的擴散模型&#xff01;它在…

MySQL 索引:索引為什么使用 B+樹?(詳解B樹、B+樹)

文章目錄一、二叉查找樹(BST)&#xff1a;不平衡二、平衡二叉樹(AVL)&#xff1a;旋轉耗時三、紅黑樹&#xff1a;樹太高由一個例子總結索引的特點基于哈希表實現的哈希索引高效的查找方式&#xff1a;二分查找基于二分查找思想的二叉查找樹升級版的BST樹&#xff1a;AVL 樹四、…