torch.nn.MaxPool2d(kernel_size, stride=None, padding=0,
dilation=1, return_indices=False, ceil_mode=False)
参数kernel_size,stride, padding,dilation数据类型: 可以是一个int类型的数据,此时卷积height和width值相同; 也可以是一个tuple数组(包含来两个int类型的数据),第一个int数据表示height的数值,tuple的第二个int类型的数据表示width的数值
参数:
(1)kernel_size(int or tuple) - max pooling的窗口大小
(2)stride(int or tuple, optional) - max pooling的窗口移动的步长。默认值是kernel_size
(3)padding(int or tuple, optional) - 输入的每一条边补充0的层数
(4)dilation(int or tuple, optional) - 一个控制窗口中元素步幅的参数
(5)return_indices - 如果等于True,会返回输出最大值的序号,对于上采样操作会有帮助
(6)ceil_mode - 如果等于True,计算输出信号大小的时候,会使用向上取整,代替默认的向下取整的操作
import os
import torch.nn as nn
import torch
from PIL import Image
import numpy as np
from torchvision import transforms
import torchvision
import torch.nn.functional as F
class Maxpool(nn.Module):
def __init__(self): # 传入需要初始化的参数,此例中无
super(Maxpool, self).__init__()
self.maxpool = nn.MaxPool2d(kernel_size=2, stride=2)
def forward(self, x):
x = self.maxpool(x)
return x
img_dir = './output10000/'
img_names = [i for i in os.listdir(img_dir)] # 获取图像名称到img_names列表中
img_path = [img_dir + i for i in img_names] # 获取图像路径到img_path列表中
# print(img_names[1])
# print(img_path[1])
img = Image.open(img_path[2]).convert('RGB')
# PIL.Image 或者 numpy.ndarray 为(H,W,C) range[0, 255]
# print(img_tensor.size())
# print(type(img))
transf = transforms.ToTensor()
img_tensor = transf(img)
# torch.FloatTensor() 为 (C,H,W) range[0.0, 1.0]
# print(img_tensor.size())
# print(type(img))
# 实例化模型
model = Maxpool()
print(model)
# 传入图片 tensor类型
output = model(img_tensor)
# print(output)
# torch的tensor类型,保存图片并输出
output_path = r'./outputmaxpool/'
if not os.path.exists(output_path):
os.mkdir(output_path)
torchvision.utils.save_image(output, output_path + img_names[2])
# torchvision.utils.save_image(output, './outputcnnpool/result44.png')
网络模型:
输入与输出图像尺寸: