習(xí)筆記(小白筆記))
池化的核心作用池化Pooling一般用在卷積網(wǎng)絡(luò)里有 4 個(gè)核心作用1降維下采樣縮小特征圖高、寬減少參數(shù)量、加快計(jì)算2特征濃縮把一塊區(qū)域的關(guān)鍵特征保留下來(lái)3平移不變性物體稍微偏移不影響提取的特征4抑制過(guò)擬合減少冗余信息三類(lèi)常用的池化1最大池化 MaxPool取區(qū)域最大值保留邊緣、紋理特征2平均池化 AvgPool取區(qū)域平均值保留整體、平滑特征3自適應(yīng)池化 AdaptivePool不管輸入多大強(qiáng)制輸出指定尺寸importtorchimporttorch.nnasnn# 1. 造一個(gè)模擬特征張量# shape: [batch1, channel1, height4, width4]xtorch.tensor([[[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]]],dtypetorch.float32)print(原始張量 shape:,x.shape)#torch.Size([1, 1, 4, 4])print(原始張量)print(x)#tensor([[[[ 1., 2., 3., 4.],[ 5., 6., 7., 8.], [ 9., 10., 11., 12.],[13., 14., 15., 16.]]]])# 最大池化2乘2窗口內(nèi)的最大值max_poolnn.MaxPool2d(kernel_size2,stride2)x_maxmax_pool(x)print(shape:,x_max.shape)#torch.Size([1, 1, 2, 2])print(x_max)#tensor([[[[ 6., 8.],[14., 16.]]]])# 平均池化2乘2窗口內(nèi)的平均值avg_poolnn.AvgPool2d(kernel_size2,stride2)x_avgavg_pool(x)print(shape:,x_avg.shape)#torch.Size([1, 1, 2, 2])print(x_avg)#tensor([[[[ 3.5000, 5.5000],[11.5000, 13.5000]]]])# 自適應(yīng)平均池化 輸出固定 1×1adap_avg_poolnn.AdaptiveAvgPool2d(output_size1)x_adapadap_avg_pool(x)print(shape:,x_adap.shape)#torch.Size([1, 1, 1, 1])print(x_adap)#tensor([[[[8.5000]]]])全連接核心作用維度變換、升維把零散一維浮標(biāo)點(diǎn) “撐開(kāi)” 成一張空白網(wǎng)格的大小在進(jìn)入全連接之前我們手里拿到的往往是一串「一維離散點(diǎn)」比如某個(gè)海域里只有 5 個(gè)浮標(biāo)每個(gè)浮標(biāo)測(cè)到一個(gè)有效波高拼起來(lái)就是一個(gè)長(zhǎng)度為 5 的向量。而后續(xù)的卷積層需要的是「二維矩陣」形式的輸入高度 × 寬度兩者形狀對(duì)不上中間就必須靠全連接層來(lái)做一次「形狀翻譯」。具體做法是把長(zhǎng)度為 N 的一維向量通過(guò)一個(gè)Linear(N, H*W)的線(xiàn)性層映射成 H×W 個(gè)數(shù)值再reshape成 H×W 的二維矩陣。這樣原本零散分布的浮標(biāo)點(diǎn)就被「撐開(kāi)」鋪滿(mǎn)了一整張網(wǎng)格每個(gè)網(wǎng)格點(diǎn)都對(duì)應(yīng)一個(gè)由所有浮標(biāo)共同決定的數(shù)值。例子輸入只有少數(shù)幾個(gè)浮標(biāo)的有效波高輸出一張二維海浪空間分布圖importtorchimporttorch.nnasnn# 假設(shè)海域網(wǎng)格是 8×8共 64 個(gè)格點(diǎn)H,W8,8# 只有 5 個(gè)浮標(biāo)測(cè)得 5 個(gè)有效波高buoystorch.randn(1,5)# shape: [batch1, 浮標(biāo)數(shù)5]# 全連接升維5 - 64fcnn.Linear(5,H*W)gridfc(buoys)# shape: [1, 64]gridgrid.reshape(1,1,H,W)# shape: [1, 1, 8, 8]print(grid.shape)# torch.Size([1, 1, 8, 8])優(yōu)點(diǎn)可以把任意長(zhǎng)度一維離散點(diǎn)變成二維矩陣解決「浮標(biāo)是離散點(diǎn)不能直接進(jìn)卷積」的難題。無(wú)論浮標(biāo)是 3 個(gè)、5 個(gè)還是 20 個(gè)只要調(diào)整Linear的輸入維度都能統(tǒng)一映射到同一張網(wǎng)格上后續(xù)卷積層的接口就固定下來(lái)了。缺點(diǎn)沒(méi)有空間局部感知不會(huì)利用 “相鄰海域海浪高度是漸變” 這個(gè)常識(shí)單獨(dú)用全連接重建出來(lái)的空間場(chǎng)效果很差。因?yàn)槿B接層對(duì)每個(gè)輸出格點(diǎn)都獨(dú)立地連接了全部輸入浮標(biāo)它并不知道「左上角」和「右下角」在空間上是遠(yuǎn)是近也無(wú)法表達(dá)「離某個(gè)浮標(biāo)越近、波高越接近該浮標(biāo)讀數(shù)」這種先驗(yàn)。結(jié)果就是重建出的空間場(chǎng)容易出現(xiàn)不自然的跳變和噪點(diǎn)看起來(lái)不像真實(shí)的海浪分布。也正因?yàn)槿绱巳B接在這里只承擔(dān)「升維 變形」的過(guò)渡角色真正負(fù)責(zé)把空間結(jié)構(gòu)補(bǔ)回來(lái)的是后面的卷積層。卷積層核心作用提取空間局部特征學(xué)習(xí)空間相鄰關(guān)系把粗糙畫(huà)布打磨成合理的海浪場(chǎng)學(xué)習(xí)海浪空間平滑、空間分布規(guī)律修復(fù)空間紋理 輸出高質(zhì)量二維網(wǎng)格化有效波高場(chǎng)