深度學習-TF、keras兩種padding方式:vaild和sam

ddy_sweety發表於2019-02-19

前言

在使用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

相關文章