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]],dtypetorch.float32) input torch.reshape(input,(-1,1,5,5)) print(f输入形状:{input.shape}) class Tudui(nn.Module): def __init__(self): super(Tudui,self).__init__() self.maxpool1MaxPool2d(kernel_size3,ceil_modeTrue) self.maxpool2MaxPool2d(kernel_size3,ceil_modeFalse) def forward(self,x): out1self.maxpool1(x) out2self.maxpool2(x) return out1,out2 tudui Tudui() output_ceil_true,output_ceil_falsetudui(input) print(True) print(output_ceil_true) print(False) print(output_ceil_false)此段代码输出为输入形状:torch.Size([1, 1, 5, 5])Truetensor([[[[2., 3.],[5., 1.]]]])Falsetensor([[[[2.]]]])1.maxpool2d最大池化目的是保留最强的特征丢掉不重要的细节让图片变小让模型跑得更快同时保证关键信息不丢失。2.input torch.reshape(input, (-1, 1, 5, 5))参数值含义第1维-1自动计算 batch_size即图片数第2维1通道数1灰度图第3维5高度5第4维5宽度5关于灰度图他只有一维从0到255只有黑白灰所以叫灰度图如果是RGB的三通道那你可以得到人眼一样的色彩鸟是4通道他们甚至能看到紫外线。同学你眼里还有光吗reshape最常见的作用是改变张量的形状维度但不会改变数据的总数量。它可以用来改变通道数但更常见的用途是增删“维度”3.self.maxpool1MaxPool2d(kernel_size3,ceil_modeTrue)这句话很有意思self是Tudui类的对象maxpool1是self的属性self.maxpool1是Maxpool2类的对象在下一句out1self.maxpool1(x)中self.maxpool1对象又做了函数用因为在nn神经网络中又__call__函数实现了对象可以做函数用kernel_size3,ceil_modeTruekernel_size在卷积层代表卷积核在池化层在这里表示池化窗口为3*3如果没定义stridestride默认和池化窗口一边大这里是3.ceil_modeTrue表示不完全的池化窗口也要取数False的话就舍弃了举例如下原来列索引: 0 1 2 3 4 行索引: ┌────┬────┬────┬────┬────┐ 0 │ 1 │ 2 │ 0 │ 3 │ 1 │ ├────┼────┼────┼────┼────┤ 1 │ 0 │ 1 │ 2 │ 3 │ 1 │ ├────┼────┼────┼────┼────┤ 2 │ 1 │ 2 │ 1 │ 0 │ 0 │ ├────┼────┼────┼────┼────┤ 3 │ 5 │ 2 │ 3 │ 1 │ 1 │ ├────┼────┼────┼────┼────┤ 4 │ 2 │ 1 │ 0 │ 1 │ 1 │ └────┴────┴────┴────┴────┘第一次取覆盖 行0-2列0-2 ┌────┬────┬────┐ │ 1 │ 2 │ 0 │ ├────┼────┼────┤ │ 0 │ 1 │ 2 │ ├────┼────┼────┤ │ 1 │ 2 │ 1 │ └────┴────┴────┘ 最大值 2第二次取向右三格┌────┬────┬────┐ │ 3 │ 1 │ ❌ │ ├────┼────┼────┤ │ 3 │ 1 │ ❌ │ ├────┼────┼────┤ │ 0 │ 0 │ ❌ │ └────┴────┴────┘ 有效数字3,1,3,1,0,0 → 最大值 3第三次取前三行取完了从第四行继续┌────┬────┬────┐ │ 5 │ 2 │ 3 │ ├────┼────┼────┤ │ 2 │ 1 │ 0 │ ├────┼────┼────┤ │ ❌ │ ❌ │ ❌ │ └────┴────┴────┘ 有效数字5,2,3,2,1,0 → 最大值 5第四次取┌────┬────┬────┐ │ 1 │ 1 │ ❌ │ ├────┼────┼────┤ │ 1 │ 1 │ ❌ │ ├────┼────┼────┤ │ ❌ │ ❌ │ ❌ │ └────┴────┴────┘ 有效数字1,1,1,1 → 最大值 1那么不难看出只有第一次取到完整9个数如果你是ceil_modeTrue你能得到2351如果你是ceil_modeFalse即取不全的就破罐子破摔不要了那你能得到的只有一个2