精华内容
下载资源
问答
  • 卷积神经网络padding为SAME和VALID的区别 参考:https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t “SAME”:不填充 “VALID”:首先...

    卷积神经网络padding为SAME和VALID的区别

    参考:https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t

    “VALID”:不填充
    “SAME”:首先尝试两边均匀填充(如果没法平分,就将平分之后剩余的填充在右边或下面)【还有一个含义就是卷积计算之后shape不改变】

    例如:
    如果:
    Input width = 13, Filter width = 6, Stride = 5
    则:
    当padding="VALID"时:(12和13直接丢弃)

       inputs:         1  2  3  4  5  6  7  8  9  10 11 (12 13)
                       |________________|                dropped
                                      |_______________|
    

    当padding="SAME"时:(经过计算,需要填充3个0,首先左右两边分别填充一个0,然后剩下一个0放右边)

                   pad|                                      |pad
       inputs:      0 |1  2  3  4  5  6  7  8  9  10 11 12 13|0  0
                    |________________|
                                   |_________________|
                                                  |_______________|
    
    展开全文
  • 今天小编就大家分享一篇基于pytorch padding=SAME的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • tensorflow paddingSAME和VALID

    千次阅读 2018-08-23 11:57:28
    看paper的时候看到same padding的说法,之前撸代码的时候用过tensorflow中的same padding,但是现在具体怎么用的记不清了,查了网上的资料,总感觉很多有些晦涩,也不能说错,但是就是好像没说清楚的样子,容易让人...

    看paper的时候看到same padding的说法,之前撸代码的时候用过tensorflow中的same padding,但是现在具体怎么用的记不清了,查了网上的资料,总感觉很多有些晦涩,也不能说错,但是就是好像没说清楚的样子,容易让人产生歧义。特此整理一波。
    (依旧会借鉴前人哦~~~)

    在卷积函数conv2d和pooling函数中都会用到下面的这种padding方式~

    在用tensorflow写CNN的时候,调用卷积核api的时候,会有填padding方式的参数,找到源码中的函数定义如下(max pooling也是一样),卷积函数原型:

    def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None,data_format=None, name=None)

    源码中对于padding参数的说明如下:

    padding: A `string` from: `"SAME", "VALID"`.The type of padding algorithm to use.

    让我们来看看变量x是一个2x3的矩阵,max pooling窗口为2x2,两个维度的strides=2。
    第一次由于窗口可以覆盖(橙色区域做max pooling),没什么问题,如下:


    接下来就是“SAME”和“VALID”的区别所在:由于步长为2,当向右滑动两步之后,“VALID”方式发现余下的窗口不到2x2所以直接将第三列舍弃,而“SAME”方式并不会把多出的一列丢弃,但是只有一列了不够2x2怎么办?填充!

    如上图所示,“SAME”会增加第四列以保证可以达到2x2,但为了不影响原来的图像像素信息,一般以0来填充。这就不难理解不同的padding方式输出的形状会有所不同了。

    在CNN用在文本中时,一般卷积层设置卷积核的大小为n×k,其中k为输入向量的维度(即[n,k,input_channel_num,output_channel_num]),这时候我们就需要选择“VALID”填充方式,这时候窗口仅仅是沿着一个维度扫描而不是两个维度。可以理解为统计语言模型当中的N-gram。 比如用在textcenn用来做文本分类的时候就是这么做的~

    我们设计网络结构时需要设置输入输出的shape,源码nn_ops.py中的convolution函数和pool函数给出的计算公式如下:

     If padding == "SAME":
          output_spatial_shape[i] = ceil(input_spatial_shape[i] / strides[i])
    
    If padding == "VALID":
      output_spatial_shape[i] = 
      ceil(
              (   input_spatial_shape[i] - 
                  (spatial_filter_shape[i]-1) * dilation_rate[i]
              ) 
              / strides[i]
         ).

    源码有点乱,其padding之后的大小计算公式可以如下
    dilation_rate为一个可选的参数,默认为1,这里我们可以先不管它。
    整理一下,对于“VALID”,输出的形状计算如下:

    new_height=new_width=(WF+1)S n e w _ h e i g h t = n e w _ w i d t h = ⌈ ( W – F + 1 ) S ⌉

    对于“SAME”,输出的形状计算如下:

    new_height=new_width=WS n e w _ h e i g h t = n e w _ w i d t h = ⌈ W S ⌉

    其中,W为输入的size,F为filter为size,S为步长,    ⌈     ⌉ 为向上取整符号。

    可能你以为你了解了细节,但是如果我举个例子,对于3*3的原始矩阵,如果stride=1,filter size=2*2,那么根据公式计算出来的same结果是:3*3,valid计算结果是:2*2
    又是为什么呢?


    按照上面举的第一个例子看,应该是都是2*2才对啊,因为没有剩余的啊~
    其实是这样的,原则是最后一列必须作为最后一个filter的第一列,也就是3 6这一列需要是最后filter的第一列,这样在卷积或者pooling的时候才不会丢失信息,也算是小细节啦~

    其他具体计算可以详见参考文献2

    参考文献:

    展开全文
  • keras之padding=same具体实现

    千次阅读 2019-07-12 10:14:58
    在keras中,之前只是从理论上了解了padding=same的原理,并没有自己尝试写出这个功能,当自己尝试写出这一过程时,发现我在理论上的理解与实际的实现有一定的差异,所以写出这篇博客,记录下自己写的过程中,对...

    在keras中,之前只是从理论上了解了padding=same的原理,并没有自己尝试写出这个功能,当自己尝试写出这一过程时,发现我在理论上的理解与实际的实现有一定的差异,所以写出这篇博客,记录下自己写的过程中发现的一些细节偏差。(注,由于我做的工作使用的是一维数据,不是图片这种二维数据,故下面都是以一维数据为例记录说明

    padding的作用

    首先重复下padding的作用:对于一个样本数据,假设是1*n的向量,若对这个向量不做任何处理,直接对其进行卷积运算,那么得到的必然是1*n1的向量(其中n1<n)。
    通过padding选择valid或same,我们可以使得到的向量要么是1*n1的向量,要么是1*n的向量。padding的作用就是选择卷积结果的shape。

    padding=same的扩长

    要扩长补零的原因:对于一个样本,一个卷积核一次卷积运算后得一个数,那么通过步长移动卷积核,则对输入数据进行m次卷积运算,可以得到m个数据。若想要输出结果和输入数据的长度一样为L0,那么就得保证刚好能进行L0次卷积运算。输入数据不扩长,是不能得到与输入数据等长的结果。

    当padding=same时,要想使卷积输出与输入保持相同的shape,那么要在卷积运算之前对输入数据进行扩长补零。那么该补多少个零?补在什么位置?

    对于扩长至多少,我并没有网上查,而是自己推测,并对推测结果进行验证,最终的结果如下:
    L1=(L0-1)*strides+kerner_size
    其中L0 是输入的一维数据长度,L1是扩长后的数据长度,strides是卷积核步长,kernel_size是卷积核长度(数据是一维的,卷积核也是)。

    如下图所示,以输入数据长5,卷积核长3,步长为2为例进行说明。

    在这里插入图片描述

    补零位置

    可能是我搜索的原因,我在网络上查到结果是,二维数据补一圈零(但是我的是一维数据,不能用),或者是末尾补零(我试了,卷积运算结果不对)。最后只能是我自己使用试探法试探了,试探的结果是:均匀补零

    均匀补零就是输入数据占据中间位置,其前后留下的相同空位补零。以输入数据长度为50,卷积核长度为10,步长为1,进行说明,其他情况类推:我们可以算出补长至59,输入数据占据中间50个位置,还剩9个空位补零,那么这就有个小问题,9不是偶数,这50个数前面是4还是5个零?我试探的答案是4,即50个输入数据前面补4个零,后面补5个零。对于偶数个补零位,当然是前后各一半了。

    展开全文
  • pytorch padding='same'

    2018-07-28 14:37:24
    pytorch使用padding='same',只需要from padding_same_conv import Conv2d
  • 卷积神经网络CNN中paddingsame/valid记录问题padding介绍计算公式参考链接 记录问题 查阅了部分资料,记录了个人对于padding的一些理解,若有不对请指正。文末附上参考链接,非常感谢文章作者! padding介绍 处理...

    卷积神经网络CNN中padding:same/valid

    记录问题

    查阅了部分资料,记录了个人对于padding的一些理解,若有不对请指正。文末附上参考链接,非常感谢文章作者!

    padding介绍

    处理图像时,根据参数判定是否给图像周围加零,需要加的具体圈数视情况而定。
    padding=“SAME”:剩余块不足卷积核大小时进行补零
    padding=“VALID”:剩余块不足卷积核大小时直接丢弃

    计算公式

    划重点!!!!
    same是在stride下保持一致,而并非是输出图像与输入图像大小始终不变!
    当stride=1时,same情况下,由于补零操作,会使得输入图像与输出图像大小不变;
    当stride不等于1,same情况下,虽然仍然补零,但输出图像会变小!

    在这里插入图片描述

    参考链接

    https://bugxch.github.io/tf%E4%B8%AD%E7%9A%84padding%E6%96%B9%E5%BC%8FSAME%E5%92%8CVALID%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB/

    展开全文
  • padding填充same 和valid两种方式

    千次阅读 2019-03-08 15:24:50
    卷积操作会使图像变小,为了图像卷积后大小不变,需要填充0,我一直以为只要padding=‘same’,卷积后大小就不变,现在发现应该不对劲。W 表示图片大小,F表示卷积核大小,S表示stride 当stride=[1,1,1,1]时,...
  • SAME:意味着输出的特征图与输入的特征图有相同的空间维度。...SAME:均匀地在左右两端加入pad,如果这个列数奇数,那么则会向最右边加入一个额外的一列。 对于SAME和VALID我们给出两组计算公式...
  • 之前一直以为,padding=same输入和输出应该是同一个尺寸,但实验中的结果并不是这样的,于是查找了很多博客,终于找到上面那个博客说清楚了。 在tensorflow官网中,padding = “SAME”输入和输出大小关系如下: ...
  • torch same padding

    2020-11-26 18:39:10
    Implement "same" padding for convolution operations mimics TensorFlowSAMEpadding (I'm writing it down into the functional interface, so thatnn.Conv2dcan just call intoF.conv2d_same_padding): 1 def...
  • tensorflow中tf.nn.conv2d中padding=samepadding=valid的区别 ...
  • padding参数 SAME 和 VALID 的区别

    千次阅读 2018-09-20 15:02:04
    https://blog.csdn.net/wuguangbin1230/article/details/79218593 https://blog.csdn.net/jiandanjinxin/article/details/77519629 ... 不同的padding方式,VALID...
  • padding参数为SAME和VALID的区别

    万次阅读 2018-01-31 16:12:04
    1..讲解 卷积:conv2 "VALID" = without padding: inputs: 1 2 3 4 5 6 7 8 9 10 11 (12 13) |________________| dropped
  • keras 中paddingsame,valid 的两种方式以及验证 输入数据 input_shape = (批量,高,宽,通道) import numpy as np import tensorflow as tf input_shape = (1, 3, 3, 1) x = np.arange(np.prod(input_shape))....
  • tf.nn.conv2d中padding=same规则介绍

    千次阅读 2020-07-09 16:41:08
    在tf.nn.conv2d函数中,当变量padding为VALID和SAME,函数具体是怎么计算的呢?其实是有公式的。为了方便演示,先定义几个变量: 输入的尺寸高和宽定义成:in_height,in_width 卷积核的高和宽定义成filter
  • torch same padding.pdf

    2021-09-14 14:15:43
    torch same padding.pdf
  • 参考:https://stackoverflow.com/questions/37674306/what-is-the-difference-between-same-and-valid-padding-in-tf-nn-max-pool-of-t If you like ascii art: "VALID" = without padding: inputs: ...
  • 卷积操作中的same padding与valid padding

    千次阅读 2019-07-12 15:55:56
      最近在研究卷积神经网络,很多卷积操作里头都会有padding这个选项,以keras中的Conv2D例,padding操作有valid,same,casual等,我只讨论same和valid这两种模式,casual以后遇到再说。 假设模型的输入维度n,...
  • 转载一个最清晰的讲解方式:https://zhuanlan.zhihu.com/p/62760780
  • 在实际操作时,我们还会碰到 padding的两种方式 “SAME” 和 “VALID”,padding = “SAME”时,会在图像的周围填 “0”,padding = “VALID”则不需要,即 P=0。一般会选“SAME”,以来减缓图像变小的速度,二
  • same":  outsize = [ insize / stride ] 其中,[ * ] 向上取整 padding zero 按照左奇右偶 "valid": outsize = [ insize - filter_size + 1 / stride ] 其中,[ * ] 向下取整 没卷到的 pixel...
  • Padding:valid和same

    千次阅读 2018-08-02 15:21:49
    一方面是为了方便same卷积padding对称填充,左右两边对称补零; n+2p-f+1=n p=(f-1)/2 另一方面,奇数过滤器有中心像素,便于确定过滤器的位置。 padding padding的方式: 备注 "...
  • Pytorch之SAME padding

    2019-09-22 22:16:56
    Implement "same" padding for convolution operations mimics TensorFlowSAMEpadding (I'm writing it down into the functional interface, so thatnn.Conv2dcan just call intoF.conv2d_same_padding)...
  • padding方式 valid same

    2018-11-29 20:09:27
  • The TensorFlow Convolution example gives an overview about the difference between SAME and VALID :For the SAME padding, the output height and width are computed as:out_height = ceil(float(in_height) /
  • TensorFlow中CNN的两种padding方式“SAME”和“VALID”

    万次阅读 多人点赞 2017-07-08 11:30:57
    在用tensorflow写CNN的时候,调用卷积核api的时候,会有填padding方式的参数,找到源码中的函数定义如下(max pooling函数也是一样): def conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,871
精华内容 17,948
关键字:

padding为same