土堆学习笔记——P19最大池化层的使用

最大池化层MaxPool2d
参数都类似卷积层的

torch.nn.MaxPool2d(kernel_size, 
stride=None, 
padding =0,dialation=1, 
return_indices=False, ceil_node=False)

kernel_size卷积核大小
stride步径,默认为卷积核大小(在卷积层时,默认1)
padding填充
dialation空洞卷积
ceil_node为True是ceil模式,向上取整(就是保留—);floor向下取整
在这里插入图片描述上图中最下面这个图解释了dialation空洞卷积
在这里插入图片描述
最大池化层应该就是取小圈里面的最大值(卷积层是小圈里的对应位置值与输入的重合位置值的乘积,再累加)
上图用来解释ceil_node,第一步在红色,默认stride=kernel_size=3,那第二步在蓝色,但是不满,那当ceil_node=true时,向上取整,则保留。

—————理论讲完,后面是实践——————————
要求的输入是4维的,n就是batchsize,c是chanel有几层?有几个图片
在这里插入图片描述所以一般写完二维数组,需要reshape一下

最大池化的作用:

保留输入的特征同时减少数据量。
输入是5x5的,但是处理后,可能输出只有2x
2的,eg网速慢的时候视频从1080p变成720p,缩小文件尺寸。

代码

import torch
from torch import nn
from torch.nn import MaxPool2d

#torch.nn.MaxPool2d(kernel_size, stride=None, padding =0,dialation=1, return_indices=False, ceil_node=False)

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,1,5,5))
print(input.shape)

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) #tensor([[[[2., 3.],[5., 1.]]]])


另一种,直接拿图片试

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

#torch.nn.MaxPool2d(kernel_size, stride=None, padding =0,dialation=1, return_indices=False, ceil_node=False)

dataset = torchvision.datasets.CIFAR10("/Users/bbing517/Downloads/蚂蚁数据集/hymenoptera_data/神经网络", 
                                       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()


writer = SummaryWriter("./logs_maxpool")
step=0

for data in dataloader:
    imgs, targets = data
    writer.add_images("input", imgs,step)
    output = tudui(imgs)
    writer.add_images("output",output,step)
    step= step+1

writer.close()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值