簡體   English   中英

conv2d(SAME)和tf.pad + conv2d(VALID)有什么區別?

[英]What's the difference between conv2d(SAME) and tf.pad + conv2d(VALID)?

我幾乎是tensorflow ,當我通過一些教程學習tensorflow時,我已經閱讀以下代碼:

if stride == 1:
    return slim.conv2d(inputs, num_outputs, kernel_size, stride=1, padding='SAME', scope=scope)
else:
    pad_total = kernel_size - 1
    pad_beg = pad_total // 2
    pad_end = pad_total - pad_beg
    inputs = tf.pad(inputs, [[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]])
    return slim.conv2d(inputs, num_outputs, kernel_size, stride=stride, padding='VALID', scope=scope)

但是,我也了解到,“ SAME”填充表示輸出數據與輸入數據具有相同的大小,而“ VALID”表示不同,並且tf.pad的方法也手動填充零,因此兩者之間有什么區別tf.pad這兩種方法? 還是這個tf.pad的目的是tf.pad

在許多實詞用例中,沒有區別。

例如,在某些imagenet架構中,我們通常使用1填充,然后進行3x3卷積。 如果首先用1填充零,然后進行卷積,或者如果使用“相同”填充進行卷積,則網絡的行為將是相同的。

但是,在非標准情況下,行為將有所不同。 請記住,您可以在卷積層定義內核大小,步幅和擴張率。

一個反例,其中conv2d(SAM)和對稱tf.pad + conv2d(VALID)之間存在差異:

輸入:(7,7,1)內核:(4,4)步幅:(2,2)

這里的conv2d(SAME)與tf.pad(左/上0像素,右/下1像素)相同,並會產生(3,3,1)輸出。

暫無
暫無

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

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