MaxPool2d:
参数详解:
kernel_size: int or tuple。
stride:窗口的步长,默认值是kernel_size的值。(卷积层默认值为1)
dilation:如下图,控制窗口内内元素之间的距离。学名空洞卷积,增加感受野。
ceil_mode:如下图,floor是向下取整,Ceiling是向上取整。在池化层中,假设kernel_size=3,也就是3*3的大小,但是原始图片为5*5,这样在进行第二次池化的时候,窗口里只有6个元素了,不够3*3了,这样会根据ceil_mode是floor和Ceiling模式来进行保留或者舍去。(这就是为什么池化会丢失信息。)
解释一下卷积层和池化层的区别:卷积的作用是提取图像特征,池化的作用是保留边缘特征,减少参数,池化分为最大池化(保留边缘特征)、平均池化(保留背景特征)。池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出。本质是 降采样,可以大幅减少网络的参数量。
# -*- coding: utf-8 -*-
# File created on 2024/7/17
# 作者:酷尔
# 公众号:酷尔计算机
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
from torch.utils.tensorboard import SummaryWriter
dataset=torchvision.datasets.CIFAR10('./dataset',train=False,transform=torchvision.transforms.ToTensor(),download=True)
dataloader=DataLoader(dataset,batch_size=64)
# 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 Wang(nn.Module):
def __init__(self):
super().__init__()
self.maxpool1=nn.MaxPool2d(kernel_size=3,ceil_mode=True)
def forward(self,x):
output=self.maxpool1(x)
return output
wang=Wang()
# output=wang(input)
# print(output)
write=SummaryWriter('p11')
step=0
for data in dataloader:
imgs,targets=data
output=wang(imgs)
# print(imgs.shape) #torch.Size([64, 3, 32, 32])
# print(output.shape) #torch.Size([64, 6, 30, 30])
write.add_images("input",imgs,step)
write.add_images("output",output,step)
step=step+1
tensorboard --logdir=p11
输入上述指令,打开tensorboard进行可视化图片。