前言
在使用Keras的时候会遇到这样的代码x = Conv2D(filters, kernel_size=5, strides=2, padding=‘same’)(x),与pytorch不同,keras和TensorFlow设置卷积层的过程中可以设置padding参数,vaild和same。“valid”代表只进行有效的卷积,对边界数据不处理。“same”代表保留边界处的卷积结果,通常会导致输出shape与输入shape相同。
分析
那vaild和same有什么区别,两者本质区别就是padding过程中采取的策略不同。
上面是按照1D的形式来进行讲解的,2D的形式原理也相同。
input = layers.Input(shape=(230, 230, 3))
print(input.shape)
>>(?, 230, 230, 3)
x = layers.Conv2D(64, (7, 7),strides=(2, 2),padding='valid',kernel_initializer='he_normal',name='conv1')(x)
print(x.shape,math.ceil((230-7+1)/2))
>>(?, 112, 112, 64) 112
input = layers.Input(shape=(230, 230, 3))
print(input.shape)
>>>>(?, 230, 230, 3)
x = layers.Conv2D(64, (7, 7),strides=(2, 2),padding='same',kernel_initializer='he_normal',name='conv1')(x)
print(x.shape,math.ceil(230/2))
>>(?, 115, 115, 64) 115