一、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.