pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
F.avg_pool1d()數(shù)據(jù)是三維輸入
input維度: (batch_size,channels,width)channel可以看成高度
kenerl維度:(一維:表示width的跨度)channel和輸入的channel一致可以認(rèn)為是矩陣的高度
假設(shè)kernel_size=2,則每倆列相加求平均,stride默認(rèn)和kernel_size保持一致,越界則丟棄(下面表示1,2列和3,4列相加求平均)
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=2)
m
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000],
[1.0000, 1.0000],
[0.0000, 0.5000],
[1.0000, 1.0000],
[1.0000, 1.0000]]])
假設(shè)kenerl_size=3,表示前3列相加求平均,后面的不足3列丟棄
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=3)
m
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.],
[1.],
[0.],
[1.],
[1.]]])
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=4)
m
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.0000],
[1.0000],
[0.2500],
[1.0000],
[1.0000]]])
假設(shè)stride=1每次移動(dòng)一個(gè)步伐
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=2,stride=1)
m
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000, 1.0000, 1.0000],
[1.0000, 1.0000, 1.0000, 1.0000],
[0.0000, 0.0000, 0.5000, 1.0000],
[1.0000, 1.0000, 1.0000, 1.0000],
[1.0000, 1.0000, 1.0000, 1.0000]]])
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input)
m = F.avg_pool1d(input,kernel_size=4,stride=1)
m
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.0000, 1.0000],
[1.0000, 1.0000],
[0.2500, 0.5000],
[1.0000, 1.0000],
[1.0000, 1.0000]]])
F.avg_pool2d()數(shù)據(jù)是四維輸入
input維度: (batch_size,channels,height,width)
kenerl維度:(二維:表示width的跨度)channel和輸入的channle一致,如果數(shù)據(jù)是三維,則channel為1.(如果只寫一個(gè)數(shù)n,kenerl=(n,n))
stride默認(rèn)和kenerl一致,這是個(gè)二維的,所以在height和width上均和kenerl一致,越界同樣丟棄。
跟cnn卷積一致
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(4,4))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[0.8125]]])
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(4,4),stride=1)
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[0.8125, 0.8750],
[0.8125, 0.8750]]])
如果求列的平均kenerl=(1,5),此時(shí)默認(rèn)stride=(1,5)
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(1,5))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[1.0000],
[1.0000],
[0.4000],
[1.0000],
[1.0000]]])
如果求行的平均kenerl=(5,1),此時(shí)默認(rèn)stride=(5,1),用卷積的概念取思考
input = torch.tensor([[1,1,1,1,1],[1,1,1,1,1],[0,0,0,1,1],[1,1,1,1,1],[1,1,1,1,1]]).unsqueeze(0).float()
print(input.size())
print(input)
m = F.avg_pool2d(input,kernel_size=(5,1))
m
torch.Size([1, 5, 5])
tensor([[[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[0., 0., 0., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]])
tensor([[[0.8000, 0.8000, 0.8000, 1.0000, 1.0000]]])
對(duì)于四維的數(shù)據(jù),channel默認(rèn)和輸入一致
input=torch.randn(10,3,4,4) m=F.avg_pool2d(input,(4,4)) print(m.size()) torch.Size([10, 3, 1, 1])
補(bǔ)充:PyTorch中AdaptiveAvgPool函數(shù)解析
自適應(yīng)池化(AdaptiveAvgPool1d):
對(duì)輸入信號(hào),提供1維的自適應(yīng)平均池化操作 對(duì)于任何輸入大小的輸入,可以將輸出尺寸指定為H*W,但是輸入和輸出特征的數(shù)目不會(huì)變化。
torch.nn.AdaptiveAvgPool1d(output_size) #output_size:輸出尺寸
對(duì)輸入信號(hào),提供1維的自適應(yīng)平均池化操作 對(duì)于任何輸入大小的輸入,可以將輸出尺寸指定為H*W,但是輸入和輸出特征的數(shù)目不會(huì)變化。
# target output size of 5 m = nn.AdaptiveAvgPool1d(5) input = autograd.Variable(torch.randn(1, 64, 8)) output = m(input)
自適應(yīng)池化(AdaptiveAvgPool2d):
class torch.nn.AdaptiveAvgPool2d(output_size)
對(duì)輸入信號(hào),提供2維的自適應(yīng)平均池化操作 對(duì)于任何輸入大小的輸入,可以將輸出尺寸指定為H*W,但是輸入和輸出特征的數(shù)目不會(huì)變化。
參數(shù):
output_size: 輸出信號(hào)的尺寸,可以用(H,W)表示H*W的輸出,也可以使用耽擱數(shù)字H表示H*H大小的輸出
# target output size of 5x7 m = nn.AdaptiveAvgPool2d((5,7)) input = autograd.Variable(torch.randn(1, 64, 8, 9)) # target output size of 7x7 (square) m = nn.AdaptiveAvgPool2d(7) input = autograd.Variable(torch.randn(1, 64, 10, 9)) output = m(input)
自適應(yīng)池化的數(shù)學(xué)解釋:


以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Pytorch自定義Dataset和DataLoader去除不存在和空數(shù)據(jù)的操作
- pytorch Dataset,DataLoader產(chǎn)生自定義的訓(xùn)練數(shù)據(jù)案例
- PyTorch實(shí)現(xiàn)重寫/改寫Dataset并載入Dataloader
- 一文弄懂Pytorch的DataLoader, DataSet, Sampler之間的關(guān)系
- PyTorch 解決Dataset和Dataloader遇到的問(wèn)題
- PyTorch 如何自動(dòng)計(jì)算梯度
- 我對(duì)PyTorch dataloader里的shuffle=True的理解
- pytorch 帶batch的tensor類型圖像顯示操作
- 解決pytorch下只打印tensor的數(shù)值不打印出device等信息的問(wèn)題
- Pytorch 如何查看、釋放已關(guān)閉程序占用的GPU資源
- pytorch中的squeeze函數(shù)、cat函數(shù)使用
- Pytorch數(shù)據(jù)讀取之Dataset和DataLoader知識(shí)總結(jié)
相關(guān)文章
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
這篇文章主要介紹了pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
基于Python的網(wǎng)頁(yè)自動(dòng)化工具DrissionPage的使用詳解
DrissionPage 是一個(gè)基于 python 的網(wǎng)頁(yè)自動(dòng)化工具,它既能控制瀏覽器,也能收發(fā)數(shù)據(jù)包,還能把兩者合而為一,下面就跟隨小編一起來(lái)學(xué)習(xí)一下它的具體使用吧2024-01-01
Python實(shí)現(xiàn)的多線程同步與互斥鎖功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的多線程同步與互斥鎖功能,涉及Python多線程及鎖機(jī)制相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Python使用date模塊進(jìn)行日期處理的終極指南
在處理與時(shí)間相關(guān)的數(shù)據(jù)時(shí),Python的date模塊是開(kāi)發(fā)者最趁手的工具之一,本文將用通俗的語(yǔ)言,結(jié)合真實(shí)案例,帶您掌握date模塊的六大核心功能和使用技巧,需要的可以了解下2025-03-03
python神經(jīng)網(wǎng)絡(luò)Keras搭建RFBnet目標(biāo)檢測(cè)平臺(tái)
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)Keras搭建RFBnet目標(biāo)檢測(cè)平臺(tái),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python selenium禁止加載某些請(qǐng)求的實(shí)現(xiàn)
本文主要介紹了python selenium禁止加載某些請(qǐng)求的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01

