19 池化層的使用
阿新 • • 發佈:2022-05-18
一、常用池化層
功能:減少模型的計算量
1.最大池化
- 卷積核區域取最大值作為結果
- 引數說明
輸入輸出都是四維:N是batch_size,C是channel
ceil_model為True,保留不完整的部分,否則去掉 (下面案例中stride=3)
2.案例
- 矩陣的池化
點選檢視程式碼
import torch # 1.輸入圖片 from torch import nn from torch.nn import MaxPool2d 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) #如果不指定型別,就會認為是long型,這樣就會報錯 # 2.輸入轉換為四維 input= torch.reshape(input,(-1,1,5,5)) #-1表示程式自己調節batchsize,1表示一個通道 print(input.shape) # 3.定義神經網路 class Tudui(nn.Module): def __init__(self): super(Tudui, self).__init__() self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)#stride預設為kernel_size的大小 def forward(self,input): output=self.maxpool1(input) return output # 4.呼叫網路 tudui=Tudui() output=tudui(input) print(input) print(output)#經過池化後的輸出
結果:
- 利用公開資料集進行視覺化測試
點選檢視程式碼
import torch # 1.輸入圖片 import torchvision from torch import nn from torch.nn import MaxPool2d from torch.utils.data import DataLoader #1.測試集 from torch.utils.tensorboard import SummaryWriter test_data=torchvision.datasets.CIFAR10(root="./CIFAR10_dataset",transform=torchvision.transforms.ToTensor(),train=False,download=True) test_loader=DataLoader(dataset=test_data,batch_size=64) # 2.定義神經網路 class Tudui(nn.Module): def __init__(self): super(Tudui, self).__init__() self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)#stride預設為kernel_size的大小 def forward(self,input): output=self.maxpool1(input) return output # 3.呼叫網路 tudui=Tudui() # 4. 視覺化 writer=SummaryWriter("./logs_19_2") step=0 for data in test_loader:# 對應資料集 imgs,target=data writer.add_images("input",imgs,step) output=tudui(imgs) writer.add_images("output",output,step) step=step+1 writer.close()
結果: