如何在PyTorch中應用二維平均池化?
我們可以使用**torch.nn.AvgPool2d()**模組對包含多個輸入平面的輸入影像應用二維平均池化。二維平均池化層的輸入大小必須為[**N,C,H,W**],其中**N**是批次大小,C是通道數,**H**和**W**是輸入影像的高度和寬度。
平均池化操作的主要特徵是過濾器或核心大小和步幅。此模組支援**TensorFloat32**。
語法
torch.nn.AvgPool2d(kernel_size)
引數
**kernel_size** – 平均視窗的大小。
除了這個引數,還有一些可選引數,例如**stride、padding、dilation**等。我們將在下面的Python示例中詳細介紹這些引數。
步驟
您可以使用以下步驟應用二維平均池化:
匯入所需的庫。在所有以下示例中,所需的Python庫是**torch**。確保您已安裝它。要在影像上應用二維平均池化,我們還需要**torchvision**和**Pillow**。
import torch import torchvision from PIL import Image
定義**輸入**張量或讀取輸入影像。如果輸入是影像,則我們首先將其轉換為torch張量。
定義**kernel_size、stride**和其他引數。
接下來,透過將上述定義的引數傳遞給**torch.nn.AvgPool2d()**來定義平均池化**pooling**。
pooling = nn.AvgPool2d(kernel_size)
將平均池化**pooling**應用於輸入張量或影像張量。
output = pooling(input)
接下來列印平均池化後的張量。如果輸入是影像張量,則要視覺化影像,我們首先將平均池化後獲得的張量轉換為PIL影像,然後視覺化影像。
讓我們來看幾個例子,以便更好地理解它的工作原理。
輸入影像
我們將在第二個示例中使用以下影像作為輸入檔案。

示例1
在下面的Python示例中,我們對輸入張量執行二維平均池化。我們應用了**kernel_size、stride、padding**和**dilation**的不同組合。
# Python 3 program to perform 2D Avg Pooling
# Import the required libraries
import torch
import torch.nn as nn
'''input of size = [N,C,H, W] or [C,H, W]
N==>batch size,
C==> number of channels,
H==> height of input planes in pixels,
W==> width in pixels.
'''
input = torch.empty(3, 4, 4).random_(256)
print("Input Tensor:
", input)
print("Input Size:",input.size())
# pool of square window of size=3, stride=1
pooling1 = nn.AvgPool2d(3, stride=1)
# Perform Average Pooling
output = pooling1(input)
print("Output Tensor:
", output)
print("Output Size:",output.size())
# pool of non-square window
pooling2 = nn.AvgPool2d((2, 1), stride=(1, 2))
# Perform average Pool
output = pooling2(input)
print("Output Tensor:
", output)
print("Output Size:",output.size())輸出
Input Tensor: tensor([[[194., 159., 7., 90.], [128., 173., 28., 211.], [252., 123., 248., 147.], [144., 107., 28., 17.]], [[122., 140., 117., 52.], [252., 118., 216., 101.], [ 88., 121., 25., 210.], [223., 162., 39., 125.]], [[168., 113., 53., 246.], [199., 23., 54., 74.], [ 95., 246., 245., 48.], [222., 175., 144., 127.]]]) Input Size: torch.Size([3, 4, 4]) Output Tensor: tensor([[[145.7778, 131.7778], [136.7778, 120.2222]], [[133.2222, 122.2222], [138.2222, 124.1111]], [[132.8889, 122.4444], [155.8889, 126.2222]]]) Output Size: torch.Size([3, 2, 2]) Output Tensor: tensor([[[161.0000, 17.5000], [190.0000, 138.0000], [198.0000, 138.0000]], [[187.0000, 166.5000], [170.0000, 120.5000], [155.5000, 32.0000]], [[183.5000, 53.5000], [147.0000, 149.5000], [158.5000, 194.5000]]]) Output Size: torch.Size([3, 3, 2])
示例2
在下面的Python示例中,我們對輸入影像執行二維平均池化。為了應用二維平均池化,我們首先將影像轉換為torch張量,並在平均池化之後再次將其轉換為PIL影像以進行視覺化。
# Python 3 program to perform 2D Average Pooling on image
# Import the required libraries
import torch
import torchvision
from PIL import Image
import torchvision.transforms as T
import torch.nn.functional as F
# read the input image
img = Image.open('panda.jpg')
# convert the image to torch tensor
img = T.ToTensor()(img)
print("Original size of Image:", img.size()) #Size([3, 466, 700])
# unsqueeze to make 4D
img = img.unsqueeze(0)
# define avg pool with square window of size=4, stride=1
pool = torch.nn.AvgPool2d(4, 1)
img = pool(img)
img = img.squeeze(0)
print("Size after AvgPool:",img.size())
img = T.ToPILImage()(img)
img.show()輸出
Original size of Image: torch.Size([3, 466, 700]) Size after AvgPool: torch.Size([3, 463, 697])

請注意,由於權重和偏差的隨機初始化,您在不同的執行中可能會得到不同的輸出影像。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP