1. 程式人生 > 其它 >19 池化層的使用

19 池化層的使用

一、常用池化層

功能:減少模型的計算量

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()

結果: