池化层,有池化核类似于卷积核。最常使用的池化操作时最大池化,最大池化操作是选择池化核所覆盖的网格中最大的数作为输出。
池化层的作用是保留输入特征同时把数据量减小
写一个仅有池化层的神经网络作为测试,体验池化层的作用
import torch
from torch import nn
#设置输入数据,5*5矩阵
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)
#变换输入数据使得输入符合池化层要求的格式
#-1batch_size自己算,1代表一维,5*5的矩阵
input=torch.reshape(input,(-1,1,5,5))
#定义神经网络类
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
#构建池化层
self.pooling=torch.nn.MaxPool2d(3,ceil_mode=True)
#前向传播函数
def forward(self,input):
return self.pooling(input)
#实例化神经网络对象
model=MyModel()
#将数据喂入神经网络处理
output=model(input)
print(output)
池化层MaxPool2d的参数ceil_mode若设置为True,则当池化核未完全覆盖网格时,仍然取最大的数字输出,若设置为False,则直接舍弃并且不输出;stride参数默认值为池化核的大小。
通过程序可以看到,输入为5*5的矩阵,输出仅为2*2,减小了数据量同时保留了输入特征。
C:\ProgramData\Anaconda3\envs\AI\python.exe C:/Users/且看风去风留/PycharmProjects/pytorch/pooling_layer.py
tensor([[[[2., 3.],
[5., 1.]]]])