簡體   English   中英

如何在conv2d中添加特定的填充

[英]How to add specific padding in conv2d

我正在嘗試將張量傳遞給python中的CNN。 我為此使用tf.layers.conv2d 我想將輸出尺寸作為輸入的一半。 我知道我可以在最大池化層之后使用“相同”的填充來實現此目的,但是我在最近的一篇論文中發現的另一種方法是,除了使用1x1填充之外,還使用具有2x2跨度的3x3內核

現在,據我所知,conv2d允許使用一個稱為padding的參數,該參數可以是“ valid”或“ same”,它不允許特定長度的padding。

有什么方法可以直接在手術中實現嗎? 我之所以問是因為這種想法是使用多個卷積層,每一層都將長度和寬度尺寸依次減半。

如果有人可以指出類似的話題或對此提供幫助,那就太好了。

編輯:

我被要求包括代碼。 但是沒有太多代碼,因為我停留在需要設計CNN的第一點。 盡管如此,這是接受初始輸入並開始定義CNN的部分(在此,我一直保持padding ='same',因為我一直在檢查是否可行):

def conv2d(z):
    output = tf.layers.conv2d(z,strides=[2,2],filters=3,padding='same',kernel_size=3);

我被困在這一點上,因為任何進一步的工作都需要正確定義初始層,因為連續的層也將以相同的原理工作。

另外,我的初始輸入大小是1通道的224x224圖像(灰度圖像)

因此,我找到了答案。 在tensorflow中有一個稱為pad的內置函數,可以用來解決它。 我正在做的是這個

output = tf.pad(output, paddings, "CONSTANT")
output = tf.layers.conv2d(output,strides=[2,2],kernel_size=3,filters=3)

這意味着我在每一層變量“ paddings”定義如下的層之前使用tf.pad。

paddings=tf.constant([[0,0], [1,1],[1,1],[0,0]])

這樣可確保在傳遞每個卷積之前對其進行填充,從而提供所需的輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM