平均池化(Average Pooling)

1. 定義與作用??

??平均池化??是一種下采樣操作,通過對輸入區域的數值取??平均值??來壓縮數據空間維度。其核心作用包括:

  • ??降低計算量??:減少特征圖尺寸,提升模型效率。
  • ??保留整體特征??:平滑局部細節,突出區域整體信息。
  • ??抑制噪聲??:通過平均運算降低隨機噪聲的影響。

與??最大池化??(取局部最大值)不同,平均池化更關注區域的全局統計特征,適用于需要保留背景或平緩變化的場景。


??2. 計算過程??

以二維平均池化為例:

  • ??輸入??:特征圖尺寸為?H×W。
  • ??窗口??:滑動窗口大小為?k×k(如2×2)。
  • ??步長(Stride)??:窗口每次移動的像素數,通常與窗口大小一致(如stride=2)。
  • ??輸出??:特征圖尺寸縮小為?$\frac{H}{k}\times\frac{W}{k}$(假設整除)。

??數學公式??:
對于每個窗口區域內的值$x_{i,j}$,輸出值為:

$output= \frac{1}{k^2} \sum_{m=0}^{k-1} \sum_{n=0}^{k-1} x_{i+m,j+n}$


??3. PyTorch 實現??

在 PyTorch 中,平均池化通過?nn.AvgPool2d?實現,支持靈活的參數配置:

??(1) 基本使用??
import torch
import torch.nn as nn# 定義平均池化層:窗口2x2,步長2,無填充
avg_pool = nn.AvgPool2d(kernel_size=2, stride=2)# 輸入:1張3通道的4x4圖像
input = torch.randn(1, 3, 4, 4)  # 形狀 (batch, channels, height, width)
output = avg_pool(input)print("輸入形狀:", input.shape)  # torch.Size([1, 3, 4, 4])
print("輸出形狀:", output.shape) # torch.Size([1, 3, 2, 2])
??(2) 帶填充的池化??
# 窗口3x3,步長2,填充1(保持輸出尺寸與輸入相近)
avg_pool_pad = nn.AvgPool2d(kernel_size=3, stride=2, padding=1)
output_pad = avg_pool_pad(input)
print("帶填充輸出形狀:", output_pad.shape)  # 輸入4x4 → 輸出2x2
??(3) 全局平均池化(Global Average Pooling)??

將整個特征圖壓縮為1x1,常用于替代全連接層:

gap = nn.AdaptiveAvgPool2d((1, 1))  # 輸出固定為1x1
output_gap = gap(input)
print("全局平均池化輸出形狀:", output_gap.shape)  # torch.Size([1, 3, 1, 1])

??4. 與最大池化的對比??
??特性????平均池化????最大池化??
??核心操作??取窗口內平均值取窗口內最大值
??適用場景??背景信息保留(如分類任務)顯著特征提取(如紋理、邊緣)
??抗噪聲能力??較強(噪聲被平均稀釋)較弱(噪聲可能被誤判為最大值)
??細節保留??弱(平滑局部細節)強(保留局部極值)
??典型應用??ResNet、Inception 中的下采樣CNN 早期層提取邊緣特征

??5. 應用場景??
  1. ??圖像分類??:
    在深層網絡中逐步壓縮特征圖,如VGG網絡的池化層。

  2. ??語義分割??:
    編碼器(Encoder)中使用平均池化壓縮信息,解碼器(Decoder)通過上采樣恢復細節(需結合跳躍連接避免信息丟失)。

  3. ??輕量化模型??:
    全局平均池化(GAP)替代全連接層,減少參數量(如SqueezeNet、MobileNet)。

  4. ??時序數據處理??:
    一維平均池化用于音頻或文本序列的下采樣:

    # 一維平均池化:窗口長度3,步長2
    avg_pool_1d = nn.AvgPool1d(kernel_size=3, stride=2)
    input_1d = torch.randn(1, 64, 10)  # (batch, channels, seq_len)
    output_1d = avg_pool_1d(input_1d)  # 輸出序列長度: (10-3)//2 +1 =4

??6. 注意事項??
  1. ??信息丟失問題??:

    • 過度下采樣可能導致小目標或細節丟失(如醫學圖像中的微小病灶)。
    • ??解決方案??:結合跳躍連接(如U-Net)或多尺度特征融合。
  2. ??參數選擇??:

    • ??Kernel Size??:較大的窗口(如4×4)加速下采樣,但可能過度平滑。
    • ??Padding??:調整填充以控制輸出尺寸(如輸入為奇數時需補零)。
  3. ??替代方案??:

    • ??跨步卷積(Strided Convolution)??:可學習的下采樣方式,兼顧特征提取與尺寸壓縮。
    • ??空間金字塔池化(SPP)??:多尺度池化增強特征魯棒性。

??7. 代碼示例:可視化平均池化效果??
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
plt.rcParams['font.sans-serif'] = ["SimSun"]  
plt.rcParams['axes.unicode_minus'] = False  
# 生成示例圖像(單通道5x5)
input_img = torch.tensor([[[1, 2, 3, 4, 5],[6, 7, 8, 9, 10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]
]], dtype=torch.float32)  # 形狀 (1,1,5,5)# 平均池化(窗口3x3,步長2,填充1)
avg_pool = nn.AvgPool2d(3, stride=2, padding=1)
output_img = avg_pool(input_img)# 打印形狀
print("輸入圖像形狀:", input_img[0,0].shape)
print("輸出圖像形狀:", output_img[0,0].shape)# 確保輸入和輸出是二維張量
input_to_show = input_img[0,0] if input_img[0,0].dim() == 2 else input_img[0,0].unsqueeze(0)
output_to_show = output_img[0,0] if output_img[0,0].dim() == 2 else output_img[0,0].unsqueeze(0)# 可視化
plt.figure(figsize=(10,4))
# 獲取 Axes 對象
ax1 = plt.subplot(121)
ax1.imshow(input_to_show, cmap='viridis')
ax1.set_title('輸入 (5x5)')ax2 = plt.subplot(122)
ax2.imshow(output_to_show, cmap='viridis')
ax2.set_title('輸出 (3x3)')plt.show()

??輸出效果??:

  • 輸入5x5經過3x3平均池化(步長2,填充1)后,輸出3x3。
  • 每個輸出值是其對應3x3窗口的平均值(邊緣區域因填充0導致平均值較低)。

輸入圖像形狀: torch.Size([5])
輸出圖像形狀: torch.Size([3])


??總結??

平均池化通過局部平均運算實現下采樣,平衡計算效率與特征保留,是CNN中的基礎操作。在PyTorch中通過?nn.AvgPool2d?快速實現,需根據任務需求選擇窗口大小和步長。關鍵注意事項包括:

  • ??任務適配??:分類任務多用平均池化,檢測/分割需謹慎避免細節丟失。
  • ??參數調優??:kernel_size和padding影響輸出尺寸與信息保留程度。
  • ??高級變體??:全局平均池化(GAP)可大幅減少模型參數。

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

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

相關文章

【dify實戰】chatflow結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載

dify結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載 觀看視頻,您將學會 在dify下如何快速的構建一個chatflow,來完成數據分析工作;如何在AI的回復中展示可視化的圖表;如何在AI 的回復中加入Excel報…

加一:從簡單問題到復雜邊界的深度思考

加一:從簡單問題到復雜邊界的深度思考 引言 在算法世界里,有些問題看似簡單,實則暗藏玄機,其中“加一”問題就是一個典型例子。所謂“加一”,通常指的是給一個由數字組成的數組表示的整數加一,這聽起來簡…

PointCore——利用局部全局特征的高效無監督點云異常檢測器論文與算法解讀

概述 三維點云異常檢測旨在從訓練集中檢測出異常數據點,是工業檢測、自動駕駛等眾多應用的基礎。然而,現有的點云異常檢測方法通常采用多個特征存儲庫來充分保留局部和全局特征表示,這帶來了高昂的計算成本以及特征之間的不匹配問題。為解決…

桌面應用UI開發方案

一、基于 Web 技術的跨平臺方案 Electron Python/Go 特點: 技術棧:前端使用 HTML/CSS/JS,后端通過 Node.js 集成 Python/Go 模塊或服務。 跨平臺:支持 Windows、macOS、Linux 桌面端,適合開發桌面應用。 生態成熟&…

redis 配置日志和數據存儲位置

Redis配置日志和數據存儲位置 介紹 Redis是一個開源的高性能鍵值存儲數據庫,常用于緩存、消息隊列和實時分析等場景。在使用Redis時,我們需要配置日志和數據存儲位置,以便更好地管理和監控Redis的運行狀態。本文將介紹如何配置Redis的日志和數…

OSI七層網絡模型詳解

OSI七層網絡模型詳解 OSI(開放系統互連)模型是國際標準化組織(ISO)提出的網絡通信框架,旨在規范不同系統間的通信。它分為七層,每層承擔特定功能,協同實現端到端的數據傳輸。 1. 物理層&#x…

Springboot 學習 之 logback-spring.xml 日志打印

文章目錄 1. property2. springProperty3. appender4. logger4.1. 通過包路徑控制日志4.2. 通過類名控制日志4.3. 按自定義 Logger 名稱控制日志 5. root6. springProfile SpringBoot 項目中可以通過自定義 logback-spring.xml 中各項配置,實現日志的打印控制 1. p…

Gradle與Idea整合

文章目錄 1. Groovy 簡介2. Groovy 安裝[非必須]3. 在idea中創建java工程 1. Groovy 簡介 在某種程度上,Groovy可以被視為Java的一種腳本化改良版,Groovy也是運行在JVM上,它可以很好地與Java代碼及其相關庫進行交互操作。它是一種成熟的面向對象編程語言…

OpenFeign終極指南:超時控制、重試策略、攔截器與自定義Starter

目錄 前言 使用 引入依賴 開啟feign 編寫feign客戶端 效果 日志 超時配置 重試機制 攔截器 Fallback兜底返回 引入依賴 編寫兜底實現 連接池 引入依賴 開啟連接池 制作OpenFeign Starter 編寫配置類 自動裝配 前言 在RPC框架中,有openFeign和Du…

Windows桌面圖標變白的解決方案

一、問題原因 桌面圖標變白通常是由于系統圖標緩存文件(IconCache.db)損壞或系統圖表示現異常導致。圖標緩存是Windows用于存儲應用程序和文件夾圖標圖像的臨時文件,當該文件損壞或系統未正確更新緩存時,圖標會因無法加載原始圖像…

【mysql】Mac 通過 brew 安裝 mysql 、啟動以及密碼設置

Mac 通過 brew 安裝 mysql 、啟動以及密碼設置 使用 brew 安裝 mysqlmysql 啟動mysql密碼設置參考文章: 使用 brew 安裝 mysql brew install mysqlmysql 啟動 下載完畢,終端告訴我們mysql數據庫沒有設置密碼的,我們可以直接執行 mysql -u r…

Manus AI:突破多語言手寫識別技術壁壘之路

Manus AI與多語言手寫識別 討論Manus AI如何突破多語言手寫識別的技術壁壘。 寫一篇詳細的博客有重點有鏈接超詳細 Manus AI:突破多語言手寫識別技術壁壘之路 在人工智能領域,多語言手寫識別一直是極具挑戰性的難題。不同語言的字符形態、書寫規則大相…

Redis字符串類型實戰:解鎖五大高頻應用場景

精心整理了最新的面試資料和簡歷模板,有需要的可以自行獲取 點擊前往百度網盤獲取 點擊前往夸克網盤獲取 Redis的字符串(String)類型是最基礎的數據結構,但其靈活性和原子性操作使其成為解決高并發場景問題的利器。本文通過真實項…

邊沿耦合與寬邊耦合的串擾

邊沿耦合與寬邊耦合的串擾 我們知道,如果兩條走線位于同一層,由于耦合兩條線之間會存在串擾。如果PCB層疊中有相鄰的信號層,那么同樣存在耦合,這兩個相鄰信號層的走線之間也會存在串擾。同層走線之間的耦合稱為邊沿耦合&#xff0…

B端可視化像企業數據的透視鏡,看清關鍵信息

在數字化時代,數據已成為企業最寶貴的資產之一。然而,數據的價值不僅取決于其數量,更在于企業能否快速、準確地提取關鍵信息并據此做出決策。B端可視化技術的出現,為企業提供了一種強大的工具,它如同企業的“透視鏡”&…

蒼穹外賣項目中所涉及到的測試內容

1.使用JWT令牌封裝用戶令牌,并且設置相應的攔截器校驗JWT的有效性,從而確保了項目的安全可靠 1.基本功能測試: 驗證合法JWT是否能夠正常通過攔截器的校驗 驗證非法的JWT能否正常通過攔截器的校驗 2.可靠性測試: 3.易用性測試 …

模擬投資大師思維:AI對沖基金開源項目詳解

這里寫目錄標題 引言項目概述核心功能詳解多樣化的AI投資智能體靈活的運行模式透明的決策過程 安裝和使用教程環境要求安裝步驟基本使用方法運行對沖基金模式運行回測模式 應用場景和實際價值教育和研究價值潛在的商業應用與現有解決方案的對比局限性與發展方向 結論 引言 隨著…

YOLO拓展-錨框(anchor box)詳解

一.錨框(anchor box)概述 1.1什么是錨框 錨框就是一種進行預測的像素框,通過遍歷輸入圖像上所有可能的像素框,然后選出正確的目標框,并對位置和大小進行調整就可以完成目標檢測任務。 對于yolo錨框的建設須基于實際…

Excel自定義函數取拼音首字母

1.啟動Excel 2003(其它版本請仿照操作),打開相應的工作表; 2.執行“工具 > 宏 > Visual Basic編輯器”命令(或者直接按“AltF11”組合鍵),進入Visual Basic編輯狀態; 3.執行“…

Cril 截取字段-生成hostname

有些event 是不規則,需要用regular express 來加工一下, 下面說一下sample 數據: 2021-10-26 17:00:12 PDT sample log data from host eagle1 2021-10-26 17:00:12 PDT sample log data from host eagle2 2021-10-26 17:00:12 PDT sample log data from host eagle3 2021…