您现在的位置是:首页 >技术交流 >[PyTorch][chapter 34][池化层与采样]网站首页技术交流
[PyTorch][chapter 34][池化层与采样]
简介[PyTorch][chapter 34][池化层与采样]
前言:
这里主要讲解一下卷积神经网络中的池化层与采样
目录
- DownSample
- Max pooling
- avg pooling
- upsample
- ReLu
1: DownSample
下采样,间隔一定行或者列进行采样,达到降维效果
早期LeNet-5 就采样该采样方式。
LeNet-5
2 Max pooling
最大值采样
取滑动窗口内的最大值,做采样值,达到降维效果
AlexNet 采用该种采样方式,取窗口内最大值或平均值
如最后一个窗口
max(7,6,4,2)=7
PyTorch nn 模块提供了API ,注意输入必须是3维或者以上的张量
至少是如下格式(channel,width, height)
# -*- coding: utf-8 -*-
"""
Created on Tue May 16 15:53:25 2023
@author: chengxf2
"""
import torch
import torch.nn as nn
def run():
data = torch.arange(0, 16.0).view(1,4,4)
print("
input:
",data)
layer = nn.MaxPool2d(2,stride=2)
pool = layer(data)
print("
pool
",pool)
run()
3 avg pooling
平均采样
取滑动窗口内的平均值,做采样值,达到降维效果
PyTorch 里面提供了采样函数 F
import torch.nn.functional as F
m = nn.AvgPool2d((2, 2), stride=(2, 2))
4 upsample
上采样,对应的API 函数如下
torch.nn.functional.interpolate(input,
size=None,
scale_factor=None,
mode='nearest',
align_corners=None,
recompute_scale_factor=None)
功能:
利用插值方法,对输入的张量数组进行上下采样操作,换句话说就是科学合理地改变数组的尺寸大小,尽量保持数据完整。
参数
input(Tensor) | 需要进行采样处理的数组 |
size(int或序列) | 输出空间的大小 |
scale_factor | 空间大小的乘数 |
mode(str) | 用于采样的算法。'nearest'| 'linear'| 'bilinear'| 'bicubic'| 'trilinear'| 'area'。默认:'nearest' |
align_corners(bool) | 在几何上,我们将输入和输出的像素视为正方形而不是点。如果设置为True,则输入和输出张量按其角像素的中心点对齐,保留角像素处的值。如果设置为False,则输入和输出张量通过其角像素的角点对齐,并且插值使用边缘值填充用于边界外值,使此操作在保持不变时独立于输入大小scale_factor。 |
recompute_scale_facto(bool) | 重新计算用于插值计算的 scale_factor。当scale_factor作为参数传递时,它用于计算output_size。如果recompute_scale_factor的False或没有指定,传入的scale_factor将在插值计算中使用。否则,将根据用于插值计算的输出和输入大小计算新的scale_factor(即,如果计算的output_size显式传入,则计算将相同 )。注意当scale_factor 是浮点数,由于舍入和精度问题,重新计算的 scale_factor 可能与传入的不同。 |
import torch.nn.functional as F
import torch
a=torch.arange(12,dtype=torch.float32).reshape(1,2,2,3)
b=F.interpolate(a,size=(4,4),mode='bilinear')
# 这里的(4,4)指的是将后两个维度放缩成4*4的大小
print(a)
print(b)
print('原数组尺寸:',a.shape)
print('size采样尺寸:',b.shape)
例2:
输入 x [1,16,7,7] [img_number,channel, width,height]
通过插值后只会更改为其长和宽
5 ReLu
卷积神经网络基本组成部分如下,因为经过
conv2d, batchNorm,Pooling 操作后,图像像素值可能是负的。
图像的像素值不能为负的的,所以正常要加个ReLu 函数
relu(x)= max(0,x)
参考:
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。