六、神經網絡-最大池化
前置知識
- 最大池化也可以稱為下采樣
- MaxPool2d中的參數:

stride:這里就和conv2d有了區別,在conv2d中stride的默認值是1,而maxpool2d中stride的默認值是kernel_size
ceil_mode:是否要向上取整,如下圖,如果為true則該情況也會保留。默認為False。

最大池化的使用
目的:保留局部最大的特征,同時將數據量減小,常用于特征提取
import torch
from torch import nn
input=torch.tensor([[1,2,0,3,1],
[0,1,2,3,1],
[1,2,1,0,0],
[5,2,3,1,1],
[2,1,0,1,1]],dtype=torch.float32)
input=torch.reshape(input,(1,5,5))
print(input.shape)
class MM(nn.Module):
def __init__(self):
super(MM,self).__init__()
self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,x):
output=self.maxpool(x)
return output
mm=MM()
output=mm(input)
print(output)
- 當我們將ceil_mode設置為true的時候,保留不滿的情況,得到的輸出結果如下:

- 當我們將ceil_mode設置為false的時候,會舍去不滿的情況,得到的輸出結果如下:

用tensorboard展示最大池化的結果
將上面的input刪除,導入數據集進行批量處理
dataset=torchvision.datasets.CIFAR10(root='./dataset', train=False, download=True,transform=torchvision.transforms.ToTensor())
dataloader=torch.utils.data.DataLoader(dataset,batch_size=64,shuffle=True)
class MM(nn.Module):
def __init__(self):
super(MM,self).__init__()
self.maxpool=nn.MaxPool2d(kernel_size=3,ceil_mode=False)
def forward(self,x):
output=self.maxpool(x)
return output
mm=MM()
writer=SummaryWriter("logs_maxpool")
step=0
for data in dataloader:
imgs,targets=data
writer.add_images("input",imgs,step)
outputs=mm(imgs)
writer.add_images("output",outputs,step)
step+=1
writer.close()
得到的結果如下所示,可見池化將圖片變模糊了


浙公網安備 33010602011771號