池化层方法
池化一般是用来对卷积层进行降维
空洞卷积,通过在卷积核的元素之间插入“空洞”(即零),可以在不增加参数量和计算量的情况下扩大卷积核的感受野。这对于捕捉图像中的多尺度信息特别有用。
池化的默认步长是池化核的大小
channels 表示数据的通道数。对于不同类型的数据,通道的含义可能会有所不同。在图像处理中,通常表示颜色通道,比如 RGB 图像有三个通道(红、绿、蓝),灰度图像只有一个通道。
对于卷积神经网络 (CNN) 来说,通道也可以理解为卷积核的数量,每个通道对输入数据进行不同的特征提取。
现在input可以只有(C,H,W)了,不需要N四维
import torch
import torch.nn.functional as F
import numpy as np
from torch import nn
from torch.nn import MaxPool2d
inputtensor = 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(inputtensor,(-1,1,5,5))
print(input.shape)
class YiZhou(nn.Module):
def __init__(self) -> None:
super().__init__()
self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=True)#当 ceil_mode=True 时,最大池化操作会向上取整,即对于边界情况,输出的尺寸会向上取整到最接近的整数。这可以确保输出的尺寸与输入的尺寸匹配。
def forward(self,input):
output=self.maxpool1(input)
return output
yizhou=YiZhou()
output=yizhou(input)
print(output)
注意一下dtype不写3.11版本前的会报错
结果如图
当ceil_mode为false的时候
import torch
import torch.nn.functional as F
import numpy as np
from torch import nn
from torch.nn import MaxPool2d
inputtensor = 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(inputtensor,(-1,1,5,5))
print(input.shape)
class YiZhou(nn.Module):
def __init__(self) -> None:
super().__init__()
self.maxpool1=MaxPool2d(kernel_size=3,ceil_mode=False)#当 ceil_mode=True 时,最大池化操作会向上取整,即对于边界情况,输出的尺寸会向上取整到最接近的整数。这可以确保输出的尺寸与输入的尺寸匹配。
def forward(self,input):
output=self.maxpool1(input)
return output
yizhou=YiZhou()
output=yizhou(input)
print(output)
如图所示
最大池化:保留数据特征但减少数据量
像素本来就低依然要池化,池化一般跟在卷积层后,卷积层是用来提取特征的,一般有相应特征的位置是比较大的数字,最大池化可以提出来这一部分有相应特征的信息
如图;