池化层介绍
最常用的是nn.MaxPool2d
# 调用方法
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
Parameters:
kernel_size (Union[int, Tuple[int, int]]) – the size of the window to take a max over. 窗口的最大值
stride (Union[int, Tuple[int, int]]) – the stride of the window. Default value is kernel_size
padding (Union[int, Tuple[int, int]]) – Implicit negative infinity padding to be added on both sides
dilation (Union[int, Tuple[int, int]]) – a parameter that controls the stride of elements in the window. 一般不设置
return_indices (bool) – if True, will return the max indices along with the outputs. Useful for torch.nn.MaxUnpool2d later. 用的较少
ceil_mode (bool) – when True, will use ceil instead of floor to compute the output shape. ceiling模式向上取整,floor模式向下取整
最大池化操作
在最大池化过程中,池化核与输入图像进行匹配,选取池化核覆盖的最大值
最大池化的作用
保留数据特征的同时减少数据量,对于神经网络来说,需要计算的数据量变少了,神经网络的训练速度就会提高
实现
import torch
import torchvision
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
dataset = torchvision.datasets.CIFAR10("./dataset", train=False, download=True, transform=torchvision.transforms.ToTensor())
dataloader = DataLoader(dataset, batch_size=64)
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.maxpool1 = MaxPool2d(kernel_size=3, ceil_mode=False)
def forward(self, input):
output = self.maxpool1(input)
return output
model = Model()
writer = SummaryWriter("logs")
step = 0
for data in dataloader:
imgs, targets = data
writer.add_images("input", imgs, step)
output = model(imgs)
writer.add_images("output", output, step)
step = step + 1
writer.close()
控制台虚拟环境中输入以下命令打开tensorboard
tensorboard --logdir=logs
池化前
池化后