pytorch 和 keras padding对比

一、pytorch 相关

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

其中padding_mode 有两种。默认值是‘zeros’,另一个是‘circular’(这种模式貌似具有bug)

padding参数:默认是0.

首先pytorch里默认的padding模式对应tensorflow里的‘valid’。

>>> input = torch.randn(1, 1, 3, 4)
>>> input
tensor([[[[ 0.4678, -1.0943, -1.2298,  0.4754],
          [ 0.0947, -0.2931,  0.9009, -1.6302],
          [ 0.9096, -0.6130, -0.4638,  1.2094]]]])

>>> m=nn.Conv2d(1,1,(2,2),stride=(2,2),bias=False)
>>> m(input)
tensor([[[[ 0.3072, -1.0599]]]], grad_fn=<MkldnnConvolutionBackward>)

如果padding 设置为1,pytorch就会在矩阵四周补0.

>>> m=nn.Conv2d(1,1,(1,1),stride=(1,1),bias=False,padding=1)
>>> m(input)
tensor([[[[ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000],
          [ 0.0000, -0.0645,  0.1508,  0.1694, -0.0655,  0.0000],
          [ 0.0000, -0.0130,  0.0404, -0.1241,  0.2246,  0.0000],
          [ 0.0000, -0.1253,  0.0845,  0.0639, -0.1666,  0.0000],
          [ 0.0000,  0.0000,  0.0000,  0.0000,  0.0000,  0.0000]]]],
       grad_fn=<MkldnnConvolutionBackward>)

 

二、keras相关

tf.keras.layers.Convolution2D
__init__(
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format=None,
    dilation_rate=(1, 1),
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs
)

keras里padding默认值也是‘valid’

keras padding设置为same的时候就会自动填充0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值