Pytorch卷积层和池化层

本文详细介绍了卷积层的概念,如何通过卷积核提取特征,以及torch.nn模块中的一维和二维卷积层API。同时涵盖了池化层(包括最大值池化、平均池化和自适应池化)及其作用,以及BatchNormalization归一化在神经网络中的重要性。
摘要由CSDN通过智能技术生成

1.概念
卷积层是用一个固定大小的矩形区去席卷原始数据,将原始数据分成一个个和卷积核大小相同的小块,然后将这些小块和卷积核相乘输出一个卷积值(注意这里是一个单独的值,不再是矩阵了)。

2.作用
特征提取

卷积的本质就是用卷积核的参数来提取原始数据的特征,通过矩阵点乘的运算,提取出和卷积核特征一致的值,如果卷积层有多个卷积核,则神经网络会自动学习卷积核的参数值,使得每个卷积核代表一个特征。
 

3.api

(1)一维 

class torch.nn.Conv1d(in_channels, out_channels, kernel_size, stride=1,padding=0,dilation=1,group=1,bias=true,padding_mode='zeros')

  • in_channels(int) 输入信号的通道
  • out_channels(int) 输出信号的通道
  • stride(int or tuple) 步长 默认为1
  • padding(int or tuple) 即为padding 默认为0
  • dilation(int or tuple) 详细描述在这里 卷积核元素之间的间距 默认为1
  • groups(int or tuple) 从输入通道到输出通道的阻塞连接数 默认为1
  • bias(bool) 添加偏置 默认为True

(2)二维

class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1,padding=0,dilation=1,group=1,bias=true,padding_mode='zeros')

池化层

在卷积神经网络中池化过程是非常关键的,卷积操作后面拼接一个非线性变换操作+池化操作已经是标配。 下面就是池化的定义:

池化函数使用某一位置的相邻输出的"总体"统计特征来"代替"网络在"该位置"的输出

作用:

①改变图像大小减少计算

②克服图像变换(平移不变性,旋转不变性)

api:

最大值池化

 torch.nn.MaxPool2d(kernel_size,
                stride=None,
                padding=0,
                dilation=1,
                return_indices=False,
                ceil_mode=False)

池化参数    说明
kernel_size    最大池化的窗口大小(整数或数组)
stride    最大池化窗口移动的步长,默认值是kernel_size(整数或数组,正数)
padding    输入的每一条边补充0的层数(整数或数组,正数)
dilation    一个控制窗口中元素步幅的参数(整数或者数组,正数),默认为1
return_indices    如果为True,则返回输出最大值的索引,便于之后的torch.nn.MaxPool2d操作
ceil_mode    如果为True,计算输出信号大小时,会使用向上取整,默认是向下取整

maxpool = nn.MaxPool2d(2,stride=2) # 定义池化层
pool_out = maxpool(image_out) # 图像数据放进去做池化操作


平均池化

average_pool = nn.AvgPool2d(2,stride=2)
pool_out = average_pool(image_out)

自适应池化

adaverage_pool = nn.AdaptiveAvgPool2d(output_size=(100,100)) # 输出大小的尺寸指定为100*100
pool_out = adaverage_pool(image_out)

Normalization归一化

batch norm批处理化层

BN层往往用在深度神经网络的卷积层之后、激活层之前。其作用可以加快模型训练时的收敛速度,使得模型训练过程更加稳定,避免梯度爆炸或者梯度消失。并且起到一定的正则化作用,几乎代替了Dropout。

api:

torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)
  • num_features:通道数C。
  • eps:归一化时加到分母上,防止分母过小导致数值计算不稳定。不用管这一项,一般用默认的就好。
  • momentum:在track_running_stats为True时,momentum是训练过程中对均值和方差进行动量更新的动量参数;在track_running_stats为False时,momentum不起作用。
  • affine:当为True时, � 和 � 参数是可学习的;反之,是不可学习的。
  • track_running_stats:当为True时,在训练时会始终记录并更新(通过动量方法更新)全局的均值和方差,然后在测试时可以用这个均值和方差来归一化(为什么要这样做?你可以理解为这个均值和方差是所有训练样本的均值和方差,是全局的,对整个样本集的统计信息的描述更加准确一些);当为False时,不记录更新全局的均值和方差,这样的话,测试时用那个batch的测试数据本身的样本和方差来归一化。

 

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值