PyTorch深度学习笔记(十)(最大池化的使用)
·
池化层原理
最大池化层有时也被称为下采样,目的是保留输入的特征的同时减少数据量。
dilation为空洞卷积,如下图所示。
Ceil_model为当超出区域时,只取最左上角的值。
池化使得数据由5 * 5 变为3 * 3,甚至1 * 1的,这样导致计算的参数会大大减小。例如1080P的电影经过池化的转为720P的电影、或360P的电影后,同样的网速下,视频更为不卡。

池化层处理数据
输入数据
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]])
输入和输出格式如下,N为batch_size,现在可有可无

将输入张量reshape为4维(3维也可以)
input = torch.reshape(input,(-1,1,5,5))
搭建神经网络,依旧创建Tudui类之后,继承初始化父类,创建最大池化层
class Tudui(nn.Module):
def __init__(self):
super(Tudui,self).__init__()
self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)
forward函数,返回的output为最大池化层的输出
def forward(self,input):
output = self.maxpool1(input)
return output
创建神经网络,输入input,并输出output
tudui = Tudui()
output = tudui(input)
print(output)
输出为

完整代码
import torch
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]])
input = torch.reshape(input,(-1,1,5,5))
class Tudui(nn.Module):
def __init__(self):
super(Tudui,self).__init__()
self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,input):
output = self.maxpool1(input)
return output
tudui = Tudui()
output = tudui(input)
print(output)
池化层处理图片
仍然使用CIFAR10数据集,batch_size设置为64
dataset = datasets.CIFAR10(root="./dataset_transfrom",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)
设置step,写日志,遍历数据集中的图像,数据为图像和target,展示出输入和经过最大池化层后的输出,step+1。
step = 0
Writer = SummaryWriter("logs_maxpool")
for data in dataloader:
imgs,targets = data
Writer.add_images("input",imgs,step)
output = tudui(imgs)
Writer.add_images("output",output,step)
step += 1
Writer.close()
效果如下

完整代码
from torch.utils.tensorboard import SummaryWriter
import torch
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.data import DataLoader
from torchvision import datasets
import torchvision
dataset = datasets.CIFAR10(root="./dataset_transform",train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader = DataLoader(dataset,batch_size=64)
class Tudui(nn.Module):
def __init__(self):
super(Tudui,self).__init__()
self.maxpool1 = MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,input):
output = self.maxpool1(input)
return output
tudui = Tudui()
step = 0
Writer = SummaryWriter("logs_maxpool")
for data in dataloader:
imgs,targets = data
Writer.add_images("input",imgs,step)
output = tudui(imgs)
Writer.add_images("output",output,step)
step += 1
Writer.close()
更多推荐
所有评论(0)