pytorch的padding的理解和操作

1  padding 的操作就是在图像块的周围加上格子, 从而使得图像经过卷积过后大小不会变化,这种操作是使得图像的边缘数据也能被利用到,这样才能更好地扩张整张图像的边缘特征.

公式表示如下:

2   卷积核中size的选择可能会导致input中的某几行(或者最后 几行)没有关联起来,这个可能是因为我们使用的模式是valid,而不是full(tensorflow中也叫做same模式,不过这个还没研究,下一步好好看一看.........)

如果想要充分的利用input信息,那么就要非常依赖于用户对于padding和stride等的参数设置,对于pytorch用户来说需要知道 卷积核的选取与设置是怎么样影响结果的.(我可能还不怎么清楚)

输入信号的格式:(N, C, H, W),其中N表示Batch size,C表示channel个数,H,W分别表示特征图的高和宽

在nn.Conv2d中padding实在卷积操作之前的, 可以进行补0操作,也可补其他的.

其中padding补0 的策略是四周都补,如果padding=1,那么就会在原来输入层的基础上,上下左右各补一行,如果padding=(1,1)中第一个参数表示在高度上面的padding,第二个参数表示在宽度上面的padding.如下图:

但是填充完值不是0 ,而是0.9862,是因为其加上了偏置值0.9862

3  pytorch中默认的padding类型是vaild,

 

 

拓展:卷积的三种模式

卷积的三种模式: full, same , valid

1  full mode

橙色部分为image,蓝色部分为绿薄核,full就是从滤波核和image刚开始相交就进行卷积,白色的部分填充为0

2  same mode

当filter的中心和image的边角重合时,开始做卷积运算,此时的filter范围比full模式小了一圈.

另外一层含义是,卷积过后输出的feature map尺寸与原图像的大小一致. (不过,大小的问题与卷积步长也有关系.)

same模式是比较常见的模式,因为在这种模式中,在图像前向传播的过程中可以让特征图的大小保持不变

3 valid mode

当filter全部在image中间的时候,进行卷积运算,可见,filter的移动范围更加小了

注意:卷积层和池化层中都会加入padding操作,

(1) 池化层的作用体现在降采样,保留图像的显著特征,降低图像维度,使得特征图变小,简化网络.,增大kernel的感受野,  同时,也会提供一些旋转不变性.  但是特征图变小,有可能会影响到网络的准确度(措施:可以通过增加特征的深度来弥补,如深度变成原来的2倍)

(2) 卷积会带来的两个问题(1,卷积运算后,输出图像的尺寸会缩小; 2 越是边缘的像素点,对输出的影响就越小,卷积的时候移到边缘就结束了,但是中间的像素点有可能会参与多次计算,但是边缘的像素点可能只参与一次计算....因此可能会丢失边缘信息.)

padding的用途: 保持边界信息;可以对有差异的图片进行补齐,使得图像的输入大小一致;在卷积层中加入padding ,会使卷基层的输入维度与输出维度一致; 同时,可以保持边界信息  ..

 

 

  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: XNOR-Net is a neural network architecture that aims to reduce the computational cost of deep learning models by using binary weights and activations. PyTorch is a popular open-source deep learning framework that provides tools for building and training neural networks. To implement XNOR-Net in PyTorch, you can use binary convolutional layers and binary activation functions. PyTorch also provides functions for calculating the bitwise XNOR operation. Here's an example of a binary convolutional layer in PyTorch: ``` import torch import torch.nn as nn class BinaryConv2d(nn.Module): def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0): super(BinaryConv2d, self).__init__() self.weight = nn.Parameter(torch.randn(out_channels, in_channels, kernel_size, kernel_size)) self.stride = stride self.padding = padding def forward(self, x): binary_weight = torch.sign(self.weight) return nn.functional.conv2d(x, binary_weight, stride=self.stride, padding=self.padding) ``` This code defines a binary convolutional layer that uses binary weights and the sign function to binarize the weights. The forward method applies the convolution using the binary weights. You can use this layer in a neural network to reduce the computational cost of the model. However, keep in mind that using binary weights and activations may reduce the accuracy of the model. ### 回答2: XNOR-Net是一种使用二值权重和二值激活函数的神经网络结构,具有高效、快速和低功耗的特点。该网络结构通过将权重和输入进行二值化,将乘法操作替换为位运算操作,从而降低了计算量和存储需求。 PyTorch是一个基于Python的深度学习框架,提供了丰富的功能和灵活的工具,使得深度学习模型的构建和训练变得更加简单。PyTorch支持各种类型的神经网络模型,包括XNOR-Net。 在PyTorch,我们可以使用二值权重和二值激活函数来构建XNOR-Net。二值权重可以使用torch.sign()函数来实现,将权重转换为-1和1的形式。二值激活函数则可以使用类似的方法,将激活值转换为0和1。 构建XNOR-Net的过程类似于构建传统的神经网络模型。我们可以使用PyTorch的nn.Module来定义模型的结构,使用nn.Linear来定义全连接层,使用nn.ReLU来定义激活函数等等。然后,我们可以使用PyTorch提供的优化器和损失函数来训练和评估我们的模型。 总之,XNOR-Net是一种高效、快速和低功耗的神经网络结构,而PyTorch是一个强大的深度学习框架,可以方便地构建和训练XNOR-Net模型。使用PyTorch可以帮助我们更好地理解和应用XNOR-Net这一新兴的神经网络结构。 ### 回答3: xnor-net是一种基于二进制神经网络(Binary Neural Network)的模型架构,其主要使用的是二值(或多值)权重和激活函数,以实现高效的计算和内存使用。而pytorch则是一种开源深度学习框架,提供了丰富的工具和函数,方便用户进行神经网络的搭建和训练。 xnor-net在pytorch的实现主要涉及两个方面。首先,在网络的模型定义部分,可以使用pytorch提供的二值权重和激活函数对网络层进行定义。同时,还需要使用xnor运算对输入和权重进行二值化处理,以实现模型参数的二值化。其次,需要在训练过程使用相应的二值化算法,来更新二值网络的参数。这一过程可以通过基于梯度的二值化方法或者近似二值化方法来实现。 通过xnor-net和pytorch的结合,可以有效地在内存和计算资源有限的情况下进行高效的神经网络训练和推理。其二值化的特性使得网络参数和数据的表示更加紧凑,从而降低了模型的存储需求和计算复杂度。此外,pytorch作为一个灵活和易于使用的深度学习框架,提供了丰富的工具和函数,方便用户对xnor-net模型的定义和训练进行个性化的调整和优化。 总之,xnor-net的pytorch实现为神经网络的高效训练和推理提供了一种创新的方案。通过合理的网络设计和训练方法的选择,可以在保持较高模型性能的同时,减少计算资源的消耗,从而为各种应用场景带来更好的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值