日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道

發(fā)布時間:2024/9/27 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.34.PyTorch Down/up sample (pytorch上下采樣)
1.34.1. 首先介紹下采樣
1.34.1.1. MaxPool2d案例
1.34.1.2. AvgPool2d案例
1.34.2. F.interpolate案例(上采樣)
1.34.3.ReLU案例
1.34.4.Pooling
1.34.4.1.二維最大池化層和平均池化層
1.34.4.2.填充和步幅
1.34.4.3.多通道
1.34.4.4.小結(jié)

1.34.PyTorch Down/up sample (pytorch上下采樣)

pooling(池化)層原則上為采樣操作,與upsample(上采樣)不同的是,pooling為下采樣操作,即將feature map變小的操作。

那么下采樣和上采樣是什么含義呢?

1.34.1.首先介紹下采樣


如圖所示,將圖片上的矩陣由右變向左的操作即為下采樣。上圖可見是每隔1個元素取一個樣,向右方向取了A和B、向下方向取了A和C。這樣完成了44矩陣向22矩陣的轉(zhuǎn)化。

而在卷積神經(jīng)網(wǎng)絡(luò)中,以max pooling操作為例:
過程如下

Kernel size為2*2的小窗口,在第一個框內(nèi)取了最大值6后,向右方向進行了步長為2的移動,在2、4、7、8四個值中取了最大值8。同理再進行向下移動。
與max pooling對應(yīng)的還有Avg pooling,即取平均數(shù)。
比較簡單,這里不再贅述。
那么在pytorch中如何完成pooling(下采樣)操作。

1.34.1.1.MaxPool2d案例

# -*- coding: UTF-8 -*-import torch import torch.nn as nn# 先定義x x = torch.rand(1, 16, 28, 28) # 括號內(nèi)第一個參數(shù)是:窗口的大小,第二個是移動的步長距離 layer = nn.MaxPool2d(2, stride=2) out1 = layer(x) print(out1.size()) """輸出結(jié)果: torch.Size([1, 16, 14, 14]) """

1.34.1.2.AvgPool2d案例

# -*- coding: UTF-8 -*-import torch import torch.nn as nn# 先定義x x = torch.rand(1, 16, 28, 28) # 括號內(nèi)第一個參數(shù)是:窗口的大小,第二個是移動的步長距離 layer = nn.AvgPool2d(2, stride=2) # 進行Avg pooling的計算 out2 = layer(x) print(out2.size()) """ 輸出結(jié)果: torch.Size([1, 16, 14, 14]) """

1.34.2.F.interpolate案例(上采樣)

同樣向上采樣的過程為:

如上圖從左至右的過程為上采樣過程。上圖將原數(shù)據(jù)進行復(fù)制即得到新的數(shù)據(jù)。
在PyTorch中,代碼為:

# -*- coding: UTF-8 -*-import torch import torch.nn.functional as F# 先定義x x = torch.rand(1, 16, 28, 28) # 上采樣的API為: .interpolate # 括號內(nèi)參數(shù)為輸入的tensor、放大的倍率、模式為緊鄰差值法 out = F.interpolate(x, scale_factor=2, mode='nearest') print(out.size()) """ 輸出結(jié)果: torch.Size([1, 16, 56, 56]) """

Bias和input channel不發(fā)生改變,原來的2828放大兩倍至5656

1.34.3.ReLU案例

下面再簡單扼要的介紹ReLU的效果:

之前有介紹過ReLU函數(shù)時將低于某個閾值的輸出全部歸為0,高于閾值的線性輸出。
上圖是使用效果圖。將黑色區(qū)塊全部取消:

# -*- coding: UTF-8 -*-import torch import torch.nn as nnx = torch.rand(1, 16, 28, 28) layer = nn.ReLU(inplace=True) out = layer(x) print(out.size()) """ 在進行ReLU操作,進行inplace操作后,較小值會變?yōu)榱?#xff0c;但數(shù)據(jù)的size不會發(fā)生改變。 通過這種數(shù)據(jù)會節(jié)省一部分的數(shù)據(jù)存儲量。 輸出結(jié)果: torch.Size([1, 16, 28, 28]) """

1.34.4.Pooling


一個典型的訓(xùn)練神經(jīng)網(wǎng)絡(luò)的步驟是:

  • 定義一個包含一組待學(xué)習(xí)的參數(shù)的神經(jīng)網(wǎng)絡(luò)
  • 將數(shù)據(jù)輸入到神經(jīng)網(wǎng)絡(luò)中并進行前向傳播
  • 根據(jù)損失函數(shù)計算輸出結(jié)果與目標(biāo)值之間的差距
  • 進行梯度反向傳播到各個參數(shù)
  • 更新網(wǎng)絡(luò)參數(shù),典型的更新方式是:weight=weight-learning_rate*gradinet

實際圖像里,我們感興趣的物體不會總出現(xiàn)在固定位置:即使我們連續(xù)拍攝同一個物體也極有可能出現(xiàn)像素位置上的偏移。這會導(dǎo)致同一個邊緣對應(yīng)的輸出可能出現(xiàn)在卷積輸出Y中的不同位置,進而對后面的模式識別造成不便。

Pooling層,它的提出是為了緩解卷積層對位置的過度敏感性

1.34.4.1.二維最大池化層和平均池化層

同卷積層一樣,池化層每次對輸入數(shù)據(jù)的一個固定形狀窗口(又稱池化窗口)中的元素計算輸出。不同于卷積層里計算輸入和核的互相關(guān)性,池化層直接計算池化窗口內(nèi)元素的最大值或者平均值。該運算也分別叫做最大池化或平均池化。在二維最大池化中,池化窗口從輸入數(shù)組的最左上方開始,按從左往右、從上往下的順序,依次在輸入數(shù)組上滑動。當(dāng)池化窗口滑動到某一位置時,窗口中的輸入子數(shù)組的最大值即輸出數(shù)組中相應(yīng)位置的元素。

圖5.6展示了池化窗口形狀為2 × 2的最大池化,陰影部分為第一個輸出元素及其計算所使用的輸入元素。輸出數(shù)組的高和寬分別為2,其中的4個元素由取最大值運算max得出:

二維平均池化的工作原理與二維最大池化類似,但將最大運算符替換成平均運算符。

1.34.4.2.填充和步幅

同卷積層一樣,池化層也可以在輸入的高和寬兩側(cè)的填充并調(diào)整窗口的移動步幅來改變輸出形狀。池化層填充和步幅與卷積層填充和步幅的工作機制一樣。我們將通過nn模塊里的二維最大池化層MaxPool2d來演示池化層填充和步幅的工作機制。我們先構(gòu)造一個形狀為(1,1,4,4)的輸入數(shù)據(jù),前兩個維度分別是批量和通道。

X = torch.arange(16, dtype=torch.float).view((1, 1, 4, 4)) X “”” 輸出結(jié)果: tensor([[[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]]]]) “””

默認(rèn)情況下,MaxPool2d實例里步幅和池化窗口形狀相同。下面使用形狀為(3,3)的池化窗口,默認(rèn)獲得形狀為(3,3)的步幅。

pool2d = nn.MaxPool2d(3) pool2d “”” 輸出結(jié)果: tensor([[[[ 5., 7.],[13., 15.]]]]) “””

當(dāng)然,我們也可以指定非正方形的池化窗口,并分別指定高和寬上的填充和步幅。

pool2d = nn.MaxPool2d((2, 4), padding=(1,2), stride=(2, 3)) pool2d(X) “”” 輸出: tensor([[[[ 1., 3.],[ 9., 11.],[13., 15.]]]]) “””

1.34.4.3.多通道

在處理多通道輸入數(shù)據(jù)時,池化層對每個輸入通道分別池化,而不是像卷積層那樣將各通道的輸入按通道相加。這意味著池化層的輸出通道數(shù)與輸入通道數(shù)相等。下面將數(shù)組X和X+1在通道維上連結(jié)來構(gòu)造通道數(shù)為2的輸入。

X = torch.cat((X, X + 1), dim = 1) X “”” 輸出: tensor([[[[ 0., 1., 2., 3.],[ 4., 5., 6., 7.],[ 8., 9., 10., 11.],[12., 13., 14., 15.]],[[ 1., 2., 3., 4.],[ 5., 6., 7., 8.],[ 9., 10., 11., 12.],[13., 14., 15., 16.]]]]) “””

池化后,我們發(fā)現(xiàn)輸出通道數(shù)仍然是2。

pool2d = nn.MaxPool2d(3, padding=1, stride=2) pool2d(X) “”” 輸出: tensor([[[[ 5., 7.],[13., 15.]],[[ 6., 8.],[14., 16.]]]]) “””

1.34.4.4.小結(jié):

?最大池化和平均池化分別取池化窗口中輸入元素的最大值和平均值作為輸出。
?池化層的一個主要作用是緩解卷積層對位置的過度敏感性。
?可以指定池化層的填充和步幅。
?池化層的輸出通道數(shù)跟輸入通道數(shù)相同。

總結(jié)

以上是生活随笔為你收集整理的39_上下采样、MaxPool2d、AvgPool2d、ReLU案例、二维最大池化层和平均池化层、填充和步幅、多通道的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。